【问题标题】:JAX- WS Complex ObjectsJAX-WS 复杂对象
【发布时间】:2014-09-25 09:59:17
【问题描述】:

我正在sortedset.com(Apache CXF、TomEE)上试用 JAX-WS 示例,并对其进行了修改以包含一个复杂对象。我在org.apache.cxf.jaxb.Utils.getMethodXJTA(Utils.java:294) 收到NullPointerException。我的代码中是否缺少任何注释?还是有更多的事情要做来编组复杂的对象?

 import javax.jws.WebService; 

    @WebService(
            portName = "HelloTomEEPort",
            serviceName = "HelloTomEEService",
            targetNamespace = "http://sortedset.com/wsdl",
            endpointInterface = "HelloTomEEWs")
    public class HelloTomEEIMplementation implements HelloTomEEWs {

       public Person getPerson(){
            Person p =  new Person();
            p.setID(5);
            p.setName("Tom");
            return p;
        }

    }

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService(targetNamespace = "http://sortedset.com/wsdl")
public interface HelloTomEEWs {
    @WebMethod    
    public Person getPerson();


}

import javax.xml.bind.annotation.XmlRegistry;

@XmlRegistry
public class Person{
 /**
     * 
     */
private int iD;
 private String name;
public int getID() {
    return iD;
}
public void setID(int iD) {
    this.iD = iD;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

}

严重:为 Servlet 部署 CXF 网络服务时出错 HelloTomEEIMplementation java.lang.NullPointerException 在 org.apache.cxf.jaxb.Utils.getMethodXJTA(Utils.java:294) 在 org.apache.cxf.jaxb.JAXBContextInitializer.walkReferences(JAXBContextInitializer.java:375) 在 org.apache.cxf.jaxb.JAXBContextInitializer.addClass(JAXBContextInitializer.java:329) 在 org.apache.cxf.jaxb.JAXBContextInitializer.addType(JAXBContextInitializer.java:232) 在 org.apache.cxf.jaxb.JAXBContextInitializer.addType(JAXBContextInitializer.java:222) 在 org.apache.cxf.jaxb.JAXBContextInitializer.walkReferences(JAXBContextInitializer.java:365) 在 org.apache.cxf.jaxb.JAXBContextInitializer.addClass(JAXBContextInitializer.java:329) 在 org.apache.cxf.jaxb.JAXBContextInitializer.begin(JAXBContextInitializer.java:183) 在 org.apache.cxf.service.ServiceModelVisitor.visitOperation(ServiceModelVisitor.java:109) 在 org.apache.cxf.service.ServiceModelVisitor.walk(ServiceModelVisitor.java:74) 在 org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:325) 在 org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86) 在 org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:490) 在 org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:697) 在 org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:550) 在 org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:265) 在 org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:214) 在 org.apache.openejb.server.cxf.CxfEndpoint.doServiceCreate(CxfEndpoint.java:101) 在 org.apache.openejb.server.cxf.pojo.PojoEndpoint.(PojoEndpoint.java:67) 在 org.apache.openejb.server.cxf.pojo.PojoWsContainer.createEndpoint(PojoWsContainer.java:70) 在 org.apache.openejb.server.cxf.pojo.PojoWsContainer.createEndpoint(PojoWsContainer.java:45) 在 org.apache.openejb.server.cxf.CxfWsContainer.start(CxfWsContainer.java:50) 在 org.apache.openejb.server.cxf.CxfService.createPojoWsContainer(CxfService.java:102) 在 org.apache.openejb.server.webservices.WsService.afterApplicationCreated(WsService.java:390) 在 org.apache.tomee.webservices.TomeeJaxWsService.afterApplicationCreated(TomeeJaxWsService.java:54) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 org.apache.openejb.observer.ObserverManager$Observer.invoke(ObserverManager.java:149) 在 org.apache.openejb.observer.ObserverManager.fireEvent(ObserverManager.java:69) 在 org.apache.openejb.loader.SystemInstance.fireEvent(SystemInstance.java:108) 在 org.apache.tomee.catalina.TomcatWebAppBuilder.afterStart(TomcatWebAppBuilder.java:1608) 在 org.apache.tomee.catalina.GlobalListenerSupport.lifecycleEvent(GlobalListenerSupport.java:113) 在 org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) 在 org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 在 org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:168) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 在 java.util.concurrent.FutureTask.run(Unknown Source) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(未知来源)

【问题讨论】:

  • 在此处发布您的完整堆栈跟踪
  • @colossus 发布了踪迹
  • 看起来像 CXF 中的一个错误。你用的是什么版本?
  • 我使用的是最新的 TomEE 1.6.0.2 / CXF 2.6.14

标签: java jakarta-ee cxf jax-ws


【解决方案1】:

尝试使用@XmlType 而不是@XmlRegistry

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2013-11-05
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多