代码之家  ›  专栏  ›  技术社区  ›  Kimble

Jersey客户端,JAXBContext在使用Maven执行应用程序时使用,而不是用Java- jar执行

  •  1
  • Kimble  · 技术社区  · 14 年前

    我正在使用Jersey客户机API实现一个使用JSON数据的REST客户机。我对JAXB没有太多的经验,尤其是没有结合JSON。我已经遵循了提供的示例 here 注册了一个JAXBContext。

    当我使用 mvn exec:java .

    我使用maven程序集插件创建一个jar。当我使用这个JAR文件运行客户机时,JAXBContext似乎根本没有被使用。结果是:

    “COM.Sun.JeSy.ApI.clit.clithANDLReExtExc:Java类Or.Digest.Mult.Actudio和Java类Or.Digest.Mult.Actudio和MIME媒体类型应用程序/JSON的消息正文读取器未被找到”

    有人知道我什么时候做错了吗?即使是关于如何继续进行调试的模糊提示也会受到极大的赞赏!

    @Provider
    public final class ModelJAXBContextResolver implements ContextResolver<JAXBContext> {
    
        private final JAXBContext context;
        private final Set<Class> types;
        private final Class[] cTypes = {
            Account.class, ...
        };
    
        public ModelJAXBContextResolver() throws Exception {
            this.types = new HashSet(Arrays.asList(cTypes));
            this.context = new JSONJAXBContext(JSONConfiguration.natural().build(), cTypes);
            throw new Exception("Json context is loaded");
        }
    
     @Override
        public JAXBContext getContext(Class<?> objectType) {
            return (types.contains(objectType)) ? context : null;
        }
    
    }
    

    客户端设置:

    DefaultApacheHttpClientConfig config = new DefaultApacheHttpClientConfig();
    config.getProperties().put(DefaultApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, true);
    config.getClasses().add(ModelJAXBContextResolver.class);
    
    client = ApacheHttpClient.create(config);
    

    帐户:

    @XmlRootElement
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Account {
        ...
    }
    
    1 回复  |  直到 11 年前
        1
  •  3
  •   techarch    12 年前

    终于!这可能是我今年最讨厌的事情了!

    添加1.4快照版本的Jersey依赖项解决了这个问题。

        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-bundle</artifactId>
            <version>1.4-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>1.4-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey.contribs</groupId>
            <artifactId>jersey-apache-client</artifactId>
            <version>1.4-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.2.2-SNAPSHOT</version>
        </dependency>