使用JAX-WS 2.1生成webservice客户端后,编译为5.0版本的class,测试环境JDK6.0,Tomcat5.0运行正常,正式环境同样是JDK6.0,Tomcat5.0,但是在正式环境中抛出空指针异常,无法正常工作,求解。
错误日志如下:java.lang.NullPointerException
com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.calcXmlName(PropertyInfoImpl.java:287)
com.sun.xml.bind.v2.model.impl.PropertyInfoImpl.calcXmlName(PropertyInfoImpl.java:262)
com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl.getTypes(ElementPropertyInfoImpl.java:96)
com.sun.xml.bind.v2.model.impl.RuntimeElementPropertyInfoImpl.getTypes(RuntimeElementPropertyInfoImpl.java:50)
com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl$1.size(ElementPropertyInfoImpl.java:42)
java.util.AbstractList$Itr.hasNext(AbstractList.java:341)
com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:139)
com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:49)
com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:41)
com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:189)
com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:204)
com.sun.xml.bind.v2.runtime.JAXBContextImpl$1.run(JAXBContextImpl.java:343)
com.sun.xml.bind.v2.runtime.JAXBContextImpl$1.run(JAXBContextImpl.java:340)
java.security.AccessController.doPrivileged(Native Method)
com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:340)
com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:204)
com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:589)
com.sun.xml.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:76)
com.sun.xml.ws.model.RuntimeModel$1.run(RuntimeModel.java:194)
java.security.AccessController.doPrivileged(Native Method)
com.sun.xml.ws.model.RuntimeModel.createJAXBContext(RuntimeModel.java:191)
com.sun.xml.ws.model.RuntimeModel.postProcess(RuntimeModel.java:77)
com.sun.xml.ws.modeler.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:253)
com.sun.xml.ws.client.ServiceContextBuilder.processAnnotations(ServiceContextBuilder.java:117)
com.sun.xml.ws.client.ServiceContextBuilder.completeServiceContext(ServiceContextBuilder.java:85)
com.sun.xml.ws.client.WSServiceDelegate.processServiceContext(WSServiceDelegate.java:114)
com.sun.xml.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:266)
com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:152)
javax.xml.ws.Service.getPort(Service.java:94)
TPCCommon.SMS.MasService.DuanXService.getDuanXServiceSoap(DuanXService.java:64)
org.apache.jsp.testSMS_jsp._jspService(testSMS_jsp.java:48)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

解决方案 »

  1.   

    经过自己排查,发现是由于jdk的版本不统一,导致通过jax-ws生成的类产生了问题。在服务器端使用wsimport生成类文件后,使用javac -target 1.5将类重新编译为1.5版本的class,调用成功。
      

  2.   

    JDK版本不一样
    这种错误都能有。。
    恩记住了
      

  3.   

    确实没想到会存在这样的问题,而且很明显能感觉到beta2版的jdk和正式版的jdk在使用wsimport生成webservice客户端的时候存在明显差异,真是学了个乖