在tomcat中将Moxy与Metro一起使用

在tomcat中将Moxy与Metro一起使用,tomcat,moxy,java-metro-framework,Tomcat,Moxy,Java Metro Framework,由于公司要求,我们不能将Glassfish用作应用程序服务器。尽管如此,我还是想使用Moxy。所以我尝试让新的Metro版本()与Tomcat7一起工作。我像metro文档()中描述的那样使用Spring引导Moxy,但我没有让它与Moxy一起工作 我已经尝试了metro文档()中提到的解决方案和这里提到的解决方案() 但我能从中得到的最多的是以下例外: com.sun.xml.ws.spi.db.DatabindingException: Unknown JAXBContext impleme

由于公司要求,我们不能将Glassfish用作应用程序服务器。尽管如此,我还是想使用Moxy。所以我尝试让新的Metro版本()与Tomcat7一起工作。我像metro文档()中描述的那样使用Spring引导Moxy,但我没有让它与Moxy一起工作

我已经尝试了metro文档()中提到的解决方案和这里提到的解决方案()

但我能从中得到的最多的是以下例外:

com.sun.xml.ws.spi.db.DatabindingException: Unknown JAXBContext implementation: class org.eclipse.persistence.jaxb.JAXBContext
    at com.sun.xml.ws.spi.db.BindingContextFactory.getJAXBFactory(BindingContextFactory.java:207)
    at com.sun.xml.ws.spi.db.BindingContextFactory.create(BindingContextFactory.java:149)
    at com.sun.xml.ws.message.jaxb.JAXBMessage.create(JAXBMessage.java:160)
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createSOAP11Fault(SOAPFaultBuilder.java:423)
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createSOAPFaultMessage(SOAPFaultBuilder.java:200)
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createSOAPFaultMessage(SOAPFaultBuilder.java:188)
    at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:391)
    at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:640)
    at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:263)
    at com.sun.xml.ws.transport.http.servlet.ServletAdapter.invokeAsync(ServletAdapter.java:218)
    at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(WSServletDelegate.java:159)
    at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(WSServletDelegate.java:194)
    at com.sun.xml.ws.transport.http.servlet.WSSpringServlet.doPost(WSSpringServlet.java:52)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
我的测试Web服务是:

@WebService
public class TestService {
    public String sayHello() throws JAXBException {
        System.out.println(org.eclipse.persistence.Version.getVersion());
        JAXBContext c = JAXBContext.newInstance(TestPojo.class);
        return "Hello";
    }
}
是的,moxy jar(org.eclipse.persistence.moxy-2.4.0.jar、org.eclipse.persistence.core-2.4.0.jar、org.eclipse.persistence.asm-3.3.1.v201206041142.jar)位于类路径上

Thx求救


JayBee

您始终可以使用JAX-WS
提供程序
机制来利用:

示例Web服务

import javax.xml.bind.*;
导入javax.xml.bind.util.JAXBSource;
导入javax.xml.transform.Source;
导入javax.xml.ws.*;
@服务模式(服务模式有效负载)
@WebServiceProvider(
portName=“FindCustomerPort”,
serviceName=“FindCustomerService”,
targetNamespace=”http://service.jaxws.blog/",
wsdlLocation=“WEB-INF/wsdl/FindCustomerService.wsdl”)
公共类FindCustomerService实现提供程序{
私有JAXBContext JAXBContext;
公共FindCustomerService(){
试一试{
jaxbContext=jaxbContext.newInstance(FindCustomerResponse.class,
FindCustomerRequest.class);
}捕获(JAXBEException e){
抛出新的WebServiceException(e);
}
}
@凌驾
公共源调用(源请求)引发WebServiceException{
试一试{
Unmarshaller Unmarshaller=jaxbContext.createUnmarshaller();
FindCustomerRequest fcRequest=(FindCustomerRequest)解组器
.unmarshal(请求);
客户=新客户();
setId(fcRequest.getArg0());
customer.setFirstName(“Jane”);
customer.setLastName(“Doe”);
FindCustomerResponse=新的FindCustomerResponse();
响应。设定值(客户);
返回新的JAXBSource(jaxbContext,response);
}捕获(JAXBEException e){
抛出新的WebServiceException(e);
}
}
}
了解更多信息


您好,谢谢您的回答。但在我看来,这是一种非常低级的方法,我必须用手做很多事情。可能有一个简单问题的答案,为什么JAXBContext.newInstance已经知道我们有一个org.eclipse.persistence.jaxb.JAXBContext,但却找不到正确的工厂?遇到了同样的问题,您找到解决方案了吗?