【发布时间】:2015-11-17 08:17:11
【问题描述】:
我正在使用 wsimport 为 WSO2 网络服务 (/services/RemoteUserStoreManagerService?wsdl) 生成客户端。
WSO2 在 JAVA 6 上的单独服务器上运行。
我的问题是使用 JAVA 8 生成客户端时,我无法调用 web 服务。
JAVA 6
使用 JAVA 6 时,存根生成和调用工作正常。我通过将客户端构造函数更改为接受 ULR 来动态指定 url。
JAVA 8
当使用 JAVA 8 生成客户端并且我使用默认构造函数(它在静态块中硬编码了 url)来调用 Web 服务客户端时,它工作正常,但是对于具有 void 返回类型的方法给出了下面提到的错误。
Exception in thread "main" javax.xml.ws.WebServiceException: No response returned.
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:77)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:147)
at com.sun.proxy.$Proxy34.updateRoleListOfUser(Unknown Source)
at com.abc.xyz.portal.service.UserAdminServiceClient.updateUser(UserAdminServiceClient.java:181)
at com.abc.xyz.portal.service.UserAdminServiceClient.main(UserAdminServiceClient.java:192)
但是当我尝试通过使用生成的方法构造函数(URL url)指定 WSDL LOCATION 来调用客户端时,我得到以下异常:
Exception in thread "main" java.lang.NullPointerException
at com.sun.xml.internal.ws.model.JavaMethodImpl.freeze(JavaMethodImpl.java:379)
at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.freeze(AbstractSEIModelImpl.java:105)
at com.sun.xml.internal.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:320)
at com.sun.xml.internal.ws.db.DatabindingImpl.<init>(DatabindingImpl.java:85)
at com.sun.xml.internal.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:59)
at com.sun.xml.internal.ws.db.DatabindingProviderImpl.create(DatabindingProviderImpl.java:43)
at com.sun.xml.internal.ws.db.DatabindingFactoryImpl.createRuntime(DatabindingFactoryImpl.java:105)
at com.sun.xml.internal.ws.client.WSServiceDelegate.buildRuntimeModel(WSServiceDelegate.java:875)
at com.sun.xml.internal.ws.client.WSServiceDelegate.createSEIPortInfo(WSServiceDelegate.java:892)
at com.sun.xml.internal.ws.client.WSServiceDelegate.addSEI(WSServiceDelegate.java:855)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:435)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:404)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:386)
at javax.xml.ws.Service.getPort(Service.java:119)
at com.abc.xyz.remoteuserstore.client.RemoteUserStoreManagerService.getRemoteUserStoreManagerServiceHttpsSoap11Endpoint(RemoteUserStoreManagerService.java:72)
at com.abc.xyz.portal.service.UserAdminServiceClient.<init>(UserAdminServiceClient.java:47)
at com.abc.xyz.portal.service.UserAdminServiceClient.main(UserAdminServiceClient.java:190)
这是因为 WSO2IS 正在处理 JAVA6 而我使用 JAVA8 来调用服务吗?
我无法理解我哪里出错了。
任何帮助将不胜感激。
【问题讨论】:
-
在之前的碳产品版本中,java 8 存在一些已知问题。使用 java 6/7 可以避免这些问题。 (这些将在即将发布的版本中修复)
-
我正在使用 WSO2 5.0.0 SP1。这会导致这个问题吗?
-
afaik 它还没有准备好 java8。所以最好使用 6/7 来避免问题。
-
感谢您的回复。最后一个问题。我在 JAVA 6 上运行 WSO2,它运行良好。现在我有一个需要在 JAVA 8 中开发的客户端,它使用 WSO2 的 Web 服务。这也会是一个问题吗?客户端是否也应该在 JAVA 6/7 上。
-
客户端的java版本不应该影响这里。但是一个问题可能是它(客户端)依赖于与 java 8 不兼容的axis2版本。除此之外,它应该可以工作。
标签: web-services java-8 wso2 jax-ws wso2is