首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与dsl-json的resteasy集成-无法注册读卡器

与dsl-json的resteasy集成-无法注册读卡器
EN

Stack Overflow用户
提问于 2016-04-07 16:21:10
回答 2查看 814关注 0票数 0

我尝试将dsl-json与resteasy集成以进行反序列化,但它抛出了异常

代码语言:javascript
运行
复制
 java.io.IOException: Unable to find reader for provided type: class com.x.y.api.v1.resource.A and fallback serialization is not registered.
17:04:51,705 ERROR [stderr] (default task-2) Found reader for: class com.x.y.api.v1.resource.A so try deserializing into that instead?
17:04:51,705 ERROR [stderr] (default task-2) Alternatively, try initializing system with custom fallback or register specified type using registerReader into class com.dslplatform.json.DslJson
17:04:51,705 ERROR [stderr] (default task-2)    at com.dslplatform.json.DslJson.showErrorMessage(DslJson.java:650)
17:04:51,706 ERROR [stderr] (default task-2)    at com.dslplatform.json.DslJson.deserialize(DslJson.java:980)
17:04:51,706 ERROR [stderr] (default task-2)    at com.x.y.provider.DSLJsonProvider.readFrom(DSLJsonProvider.java:41)
17:04:51,706 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:61)
17:04:51,706 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.interception.ServerReaderInterceptorContext.readFrom(ServerReaderInterceptorContext.java:60)
17:04:51,706 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:53)
17:04:51,707 ERROR [stderr] (default task-2)    at org.jboss.resteasy.security.doseta.DigitalVerificationInterceptor.aroundReadFrom(DigitalVerificationInterceptor.java:34)
17:04:51,707 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:55)
17:04:51,707 ERROR [stderr] (default task-2)    at org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59)
17:04:51,707 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:55)
17:04:51,707 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:151)
17:04:51,708 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:91)
17:04:51,708 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:114)
17:04:51,708 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)
17:04:51,708 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)
17:04:51,708 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)
17:04:51,709 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:395)
17:04:51,709 ERROR [stderr] (default task-2)    at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:202)
17:04:51,709 ERROR [stderr] (default task-2)    at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)
17:04:51,710 ERROR [stderr] (default task-2)    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
17:04:51,710 ERROR [stderr] (default task-2)    at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) 

我的DSLJsonProvider类如下所示。

代码语言:javascript
运行
复制
    package com.x.y.provider;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Type;

    import javax.ws.rs.Consumes;
    import javax.ws.rs.Produces;
    import javax.ws.rs.WebApplicationException;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.MultivaluedMap;
    import javax.ws.rs.ext.MessageBodyReader;
    import javax.ws.rs.ext.MessageBodyWriter;
    import javax.ws.rs.ext.Provider;

    import com.dslplatform.json.DslJson;
    import com.dslplatform.json.JsonReader;
    import com.dslplatform.json.JsonReader.ReadObject;
    import com.dslplatform.json.JsonWriter;

    @SuppressWarnings("rawtypes")
    @Provider
    @Consumes({MediaType.APPLICATION_JSON, "text/json"})
    @Produces({MediaType.APPLICATION_JSON, "text/json"})
    public class DSLJsonProvider extends DslJson implements MessageBodyWriter, MessageBodyReader {

        @Override
        public boolean isReadable(Class type, Type genericType, Annotation[] annotations,
                javax.ws.rs.core.MediaType mediaType) {
            return true;
        }

        @SuppressWarnings("unchecked")
        @Override
        public Object readFrom(Class type, Type genericType, Annotation[] annotations, javax.ws.rs.core.MediaType mediaType,
                MultivaluedMap httpHeaders, InputStream entityStream) throws IOException, WebApplicationException {
            DslJson<Object> dslJson = new DslJson<Object>();
            try {
                dslJson.registerReader(type,null);//Here I need help
                return dslJson.deserialize(type, entityStream, new byte[1024]);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                entityStream.close();
            }
            return null;
        }

        @Override
        public boolean isWriteable(Class type, Type genericType, Annotation[] annotations,
                javax.ws.rs.core.MediaType mediaType) {
            return true;
        }

        @Override
        public long getSize(Object t, Class type, Type genericType, Annotation[] annotations,
                javax.ws.rs.core.MediaType mediaType) {
            return -1;
        }

        @Override
        @SuppressWarnings("resource")
        public void writeTo(Object t, Class type, Type genericType, Annotation[] annotations,
                javax.ws.rs.core.MediaType mediaType, MultivaluedMap httpHeaders, OutputStream entityStream)
                        throws IOException, WebApplicationException {
            JsonWriter writer = new JsonWriter();
            try {
//Need help to register writer
                writer.toStream(entityStream);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

编辑1: My pom.xml

代码语言:javascript
运行
复制
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.x.y</groupId>
    <artifactId>project-web</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>project-web</name>
    <dependencies>
        <dependency>
            <groupId>io.undertow</groupId>
            <artifactId>undertow-core</artifactId>
            <version>1.3.20.Final</version>
        </dependency>
        <dependency>
            <groupId>io.undertow</groupId>
            <artifactId>undertow-servlet</artifactId>
            <version>1.3.20.Final</version>
        </dependency>
        <dependency>
            <groupId>com.dslplatform</groupId>
            <artifactId>dsl-json</artifactId>
            <version>0.9.5</version>
        </dependency>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
            <version>3.0.16.Final</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jackson-provider</artifactId>
            <version>3.0.16.Final</version>
        </dependency>
        <dependency>
            <groupId>com.dslplatform</groupId>
            <artifactId>dsl-json-java8</artifactId>
            <version>0.9.7</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.3</version>
                <configuration>
                    <annotationProcessors>
                        <annotationProcessor>com.dslplatform.json.CompiledJsonProcessor</annotationProcessor>
                    </annotationProcessors>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

我在尝试注册读者时有点受阻,writers.Any lead非常感谢。

资源: dsl-json:https://github.com/ngs-doo/dsl-json

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-04-08 22:28:55

错误消息显示找不到com.x.y.api.v1.resource.A的读卡器

这要么是你忘记将@CompiledJson添加到那个类中,要么是由于某种原因没有被ServiceLoader拾取。

如果你想为JsonReader.ReadObject注册你自己的阅读器,你可以看看geom readers,尽管我认为你可能只想为编译器添加注释来获取它。

这些批注的处理器位于一个单独的库(处理器)中,所以大多数情况下,您可能没有包含它,或者将其添加为批注处理器。

您需要去掉dslJson.registerReader(类型,null);因为这将覆盖正确的读取器。

我更新了dsl-json自述文件,因为我偶尔会遇到这样的错误。也就是说:“在启动期间,资源通过ServiceLoader加载服务。为此,META-INF/services/com.dslplatform.json.Configuration必须与编译步骤中创建的类dsl_json.json.ExternalSerialization的内容一起存在。在某些情况下,此文件不会复制到APK或相应的jar/war文件。您可以通过在项目中的src/main/ DslJson /META-INF/ServiceLoader下创建此类文件来解决此问题,作为所使用的打包/构建工具的解决方法。”

我会对你的设置更感兴趣,所以如果这解决了你的问题,请在存储库上提交一个问题,这样它就可以得到适当的解决。

票数 0
EN

Stack Overflow用户

发布于 2019-03-29 10:54:10

我遇到了同样的问题,并通过将默认构造函数添加到反序列化的类中进行了修复

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36470538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档