在weblogic 12.2.1.3上创建javax.xml.ws.Service的实例时,出现NullPointerException

问题描述 投票:0回答:1

[我们有一个由JAX-WS RI 2.2.9-b130926.1035生成的EshopService_Service类-生成的源版本:wsdl文件中的2.2。

从weblogic 12.1.2.0.0升级到12.2.1.3后,在创建Service实例时得到了该堆栈:

java.lang.NullPointerException

    at com.oracle.webservices.impl.wsdl.WSDLBoundOperationImpl.<init>(WSDLBoundOperationImpl.java:540)

    at com.oracle.webservices.impl.wsdl.WSDLBoundPortTypeImpl.<init>(WSDLBoundPortTypeImpl.java:80)

    at com.oracle.webservices.impl.wsdl.WSDLModelImpl.mapBindings(WSDLModelImpl.java:169)

    at com.oracle.webservices.impl.wsdl.WSDLModelImpl.mapBindings(WSDLModelImpl.java:189)

    at com.oracle.webservices.impl.wsdl.WSDLModelImpl.<init>(WSDLModelImpl.java:48)

    at com.oracle.webservices.impl.wsdl.WSDLConverterImpl.wsdlModelFromDefinition(WSDLConverterImpl.java:292)

    at com.oracle.webservices.impl.wsdl.WSDLConverterImpl.getWSDLModel(WSDLConverterImpl.java:248)

    at com.oracle.webservices.impl.wsdl.WSDLConverterImpl.getWSDLService(WSDLConverterImpl.java:303)

    at weblogic.wsee.jaxws.spi.WLSProvider$ServiceDelegateImpl.<init>(WLSProvider.java:1124)

    at weblogic.wsee.jaxws.spi.WLSProvider.createServiceDelegate(WLSProvider.java:223)

    at weblogic.wsee.jaxws.spi.WLSProvider.createServiceDelegate(WLSProvider.java:150)

    at javax.xml.ws.Service.<init>(Service.java:77)

    at xx.xx.xxxxxxx.services.eshop.EshopService_Service.<init>(EshopService_Service.java:40)

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)

    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105)

    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59)

    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:238)

    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:242)

    at com.xxx.prj.xxx.col.integration.business.IntegrationService.getEshopServicePort(IntegrationService.groovy:39)

    at com.xxx.prj.xxxx.col.integration.business.IntegrationService.<init>(IntegrationService.groovy:46)

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

WSDLBoundOperationImpl是weblogic的内部类,并且在Web上没有有关该类的信息…

我们已经反编译了类WSDLBoundOperationImpl,当owner.getPortType()返回null时,它似乎在owner.getPortType().get(this.name);上失败了。

事实是我们的WSDL不包含任何“ portType”元素,但是portType不是必需的wsdl指令,并且相同的WSDL在Weblogic 12.1.2.0.0中运行良好。

如何解决这个问题?我们无法更改wsdl文件的内容...

谢谢。

java soap wsdl weblogic weblogic12c
1个回答
0
投票

看来我已经找到了解决方法... Weblogic正在使用自己的jax ws Provider实现...但是使用https://docs.oracle.com/cd/E24329_01/web.1211/e24964/data_types.htm#WSGET348功能,您可以将javax.xml.ws.spi.Provider定义为org.apache.cxf.jaxws.spi.ProviderImpl(在我的情况下)...然后,在创建Service实例时,使用apace.cxf provider实例作为提供者...

© www.soinside.com 2019 - 2024. All rights reserved.