Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java resteasy与dsl json集成-无法注册读卡器_Java_Json_Rest_Resteasy_Dsl - Fatal编程技术网

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

Java resteasy与dsl json集成-无法注册读卡器,java,json,rest,resteasy,dsl,Java,Json,Rest,Resteasy,Dsl,我正在尝试将dsl json与resteasy集成以进行反序列化/序列化,但它引发了一个异常 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:

我正在尝试将dsl json与resteasy集成以进行反序列化/序列化,但它引发了一个异常

 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类如下所示

    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();
            }
        }

    }
包com.x.y.provider;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.OutputStream;
导入java.lang.annotation.annotation;
导入java.lang.reflect.Type;
导入javax.ws.rs.Consumes;
导入javax.ws.rs.products;
导入javax.ws.rs.WebApplicationException;
导入javax.ws.rs.core.MediaType;
导入javax.ws.rs.core.MultivaluedMap;
导入javax.ws.rs.ext.MessageBodyReader;
导入javax.ws.rs.ext.MessageBodyWriter;
导入javax.ws.rs.ext.Provider;
导入com.dslplation.json.DslJson;
导入com.dslplation.json.JsonReader;
导入com.dslplation.json.JsonReader.ReadObject;
导入com.dslplation.json.JsonWriter;
@抑制警告(“原始类型”)
@提供者
@使用({MediaType.APPLICATION_JSON,“text/JSON”})
@产生({MediaType.APPLICATION_JSON,“text/JSON”})
公共类DSLJsonProvider扩展DslJson实现MessageBodyWriter、MessageBodyReader{
@凌驾
公共布尔值可读取(类类型、类型genericType、注释[]注释、,
javax.ws.rs.core.MediaType(媒体类型){
返回true;
}
@抑制警告(“未选中”)
@凌驾
公共对象读取自(类类型、类型genericType、注释[]注释、javax.ws.rs.core.MediaType MediaType、,
多值Map httpHeaders,InputStream entityStream)引发IOException,WebApplicationException{
DslJson=新的DslJson();
试一试{
registerReader(type,null);//这里我需要帮助
返回dslJson.deserialize(类型,entityStream,新字节[1024]);
}捕获(例外e){
e、 printStackTrace();
}最后{
entityStream.close();
}
返回null;
}
@凌驾
公共布尔值可写(类类型、类型genericType、注释[]注释、,
javax.ws.rs.core.MediaType(媒体类型){
返回true;
}
@凌驾
公共长getSize(对象t、类类型、类型genericType、注释[]注释、,
javax.ws.rs.core.MediaType(媒体类型){
返回-1;
}
@凌驾
@抑制警告(“资源”)
public void writeTo(对象t、类类型、类型genericType、注释[]注释、,
javax.ws.rs.core.MediaType MediaType,多值Map HttpHeader,OutputStream entityStream)
抛出IOException、WebApplicationException{
JsonWriter=新的JsonWriter();
试一试{
//需要帮助注册作者吗
writer.toStream(entityStream);
}捕获(例外e){
e、 printStackTrace();
}
}
}
编辑1: 我的pom.xml

<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>

4.0.0
com.x.y


提前感谢。

错误消息说找不到的读取器:
com.x.y.api.v1.resource.A

要么是您忘记将
@CompiledJson
添加到该类中,要么是由于某种原因,
ServiceLoader
没有获取该类

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

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

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

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


我对您的设置更感兴趣,因此如果这为您解决了问题,请在存储库中提交一个问题,以便正确解决。

我也遇到了同样的问题,并通过向反序列化类添加默认构造函数来解决。

谢谢您的回复!我已经为该类准备了@CompiledJson。我已经编辑了该问题,以包含我的问题这是包含注释处理器的正确方法吗?您仍然缺少对处理器的依赖关系(dsl json处理器)。我添加了该依赖项。但仍然不走运。它仍然表示找不到读取器。当我在调试模式中检查时,读取器被传递为null。您知道这是怎么回事吗?谢谢!在DslJson初始化过程中选择了正确的读取器。您可以检查读取器映射以查看是否有内容。如果一切都正确在安装过程中,您的所有@CompiledJson类型都应该在那里。我检查了readers映射。我发现我的@CompiledJson类型都不存在。我在“jsonReaders”映射中只看到默认类型,在“jsonObjectReaders”映射中看到“{}”。此外,我还看到了回退和上下文也为null。我无法找到我缺少的内容:(