CXF JSONProvider编组导致java.lang.ClassNotFoundException:com.sun.xml.bind.marshaller.NamespacePrefixMapper
我正在尝试使用CXF设置一个JAX-RS服务,它将接受并返回json和xml。我还希望通过带有xsd的JAXB验证请求消息。 为了实现这一点,我经历了一些问题,但总有另一个问题需要克服 所以这个问题是关于 java.lang.ClassNotFoundException:com.sun.xml.bind.marshaller.NamespacePrefixMapper 我得到的配置和异常如下所示 beans.xml 附带服务响应 IncidentServiceResponse的pacage-info.java 例外 在我的请求中,我发送了一条JSON消息,该消息正在成功地解组和验证,因此我没有包含上面的事件对象。但在响应中,IncidentServiceResponse的解组失败,出现上述异常 我花了一整天的时间寻找解决办法,但运气不好。有什么想法吗 我将Tomcat7.0.42与Java1.7.0_55和CXF3.0.1一起使用。 在java的rt.jar中,com.sun.xml.bind.marshaller.NamespacePrefixMapper不存在,导致异常的原因是com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper存在。为什么cxf不接受此实施CXF JSONProvider编组导致java.lang.ClassNotFoundException:com.sun.xml.bind.marshaller.NamespacePrefixMapper,java,xml,web-services,jaxb,cxf,Java,Xml,Web Services,Jaxb,Cxf,我正在尝试使用CXF设置一个JAX-RS服务,它将接受并返回json和xml。我还希望通过带有xsd的JAXB验证请求消息。 为了实现这一点,我经历了一些问题,但总有另一个问题需要克服 所以这个问题是关于 java.lang.ClassNotFoundException:com.sun.xml.bind.marshaller.NamespacePrefixMapper 我得到的配置和异常如下所示 beans.xml 附带服务响应 IncidentServiceResponse的pacage-in
经过一天的搜索和绝望,在发布了这个大问题后,5分钟后我找到了解决方案,谢谢。好笑 我在pom中缺少了这种依赖性
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-databinding-jaxb</artifactId>
<version>3.0.1</version>
</dependency>
无论如何谢谢你经过一天的搜索和绝望,在发布了这个大问题后,5分钟后我找到了解决办法。好笑 我在pom中缺少了这种依赖性
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-databinding-jaxb</artifactId>
<version>3.0.1</version>
</dependency>
无论如何谢谢你,所以这个问题很值得发布现在其他人会找到你的解决方案并从中获益。荣誉因此,当时发布这个问题是值得的现在其他人会找到你的解决方案并从中获益。荣誉
package com.ba.sysman.assyst.rest.responses;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class IncidentServiceResponse {
@XmlElement
Integer ticketId;
@XmlElement
String errorMessage;
@XmlTransient
String rawResponse;
public IncidentServiceResponse() {
// TODO Auto-generated constructor stub
}
public IncidentServiceResponse(Integer id, String rawResponse) {
this.ticketId = id;
this.rawResponse = rawResponse;
}
public Integer getTicketId(){
return ticketId;
}
public String getRawResponse() {
return rawResponse;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public String getErrorMessage() {
return errorMessage;
}
}
@XmlSchema(namespace = "http://www.ba.com/schema/BAserviceDeskAPI", elementFormDefault = XmlNsForm.QUALIFIED)
package com.ba.sysman.assyst.rest.responses;
import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlNsForm;
org.apache.cxf.interceptor.Fault: com/sun/xml/bind/marshaller/NamespacePrefixMapper
at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleWriteException(JAXRSOutInterceptor.java:363)
at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:266)
at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:117)
at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:80)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:83)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:243)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:223)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:197)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:171)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: com/sun/xml/bind/marshaller/NamespacePrefixMapper
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at org.apache.cxf.common.classloader.ClassLoaderUtils.loadClass(ClassLoaderUtils.java:256)
at org.apache.cxf.common.jaxb.JAXBUtils.createNamespaceWrapper(JAXBUtils.java:1024)
at org.apache.cxf.common.jaxb.JAXBUtils.setNamespaceMapper(JAXBUtils.java:559)
at org.apache.cxf.jaxrs.provider.AbstractJAXBProvider.setNamespaceMapper(AbstractJAXBProvider.java:155)
at org.apache.cxf.jaxrs.provider.json.JSONProvider.marshal(JSONProvider.java:499)
at org.apache.cxf.jaxrs.provider.json.JSONProvider.marshal(JSONProvider.java:611)
at org.apache.cxf.jaxrs.provider.json.JSONProvider.writeTo(JSONProvider.java:388)
at org.apache.cxf.jaxrs.utils.JAXRSUtils.writeMessageBody(JAXRSUtils.java:1363)
at org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage(JAXRSOutInterceptor.java:244)
... 31 more
Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.marshaller.NamespacePrefixMapper
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
... 47 more
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-databinding-jaxb</artifactId>
<version>3.0.1</version>
</dependency>