作为一个前提,我还不是很有经验,但我试图阅读和搜索我可能做的所有事情,与这个话题有关,但仍然没有运气。
我有一个简单的客户端来调用web服务但是一旦完全设置(包括使用证书和几个属性来设置)我得到了标题中提到的错误:
javax.xml.ws.WebServiceException: {http://http://cert.controller.portaapplicativa.ictechnology.it//}MyService is not a valid service. Valid services are:
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:187)
at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:159)
at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:82)
at javax.xml.ws.Service.<init>(Service.java:56)
at package.client.wsimport.MyService..<init>(MyService.java:46)
at package.client.Client.doRicercaDEN(Client.java:55)
at package.client.Client.main(Client.java:36)
我尝试使用JAX-WS再次生成客户端:
java -classpath C:\Programmi\Java\jdk1.6.0_38\lib\tools.jar com.sun.tools.internal.ws.WsImport -verbose C:\WsdlFile.wsdl -p package.client.wsimport -s C:\tmp\ws\
我得到同样的问题。我正在使用wsdl的本地副本,因为wsimport似乎不喜欢我试图在属性中设置的证书(我很可能做错了,但我选择了简单的解决方法,因为我有更紧迫的问题)。
尝试使用SoapUI测试服务,一切正常,但我需要将代理的首选项设置为&#34;无&#34;。
所以我尝试确保连接在我的客户端中也不使用任何代理:
(...)
systemSettings.remove("http.proxyHost");
systemSettings.remove("http.proxyPort");
systemSettings.remove("https.proxyHost");
systemSettings.remove("https.proxyPort");
System.setProperty("http.nonProxyHosts","*");
System.setProperty("https.nonProxyHosts","*");
(顺便说一下,之前&#34; *&#34;,根据我的理解,它应该作为#34的通配符;每个域&#34;,我也试过指定特定域名) 无论如何,结果总是一样的。
我做错了什么,有什么可以尝试的吗?
答案 0 :(得分:0)
我怀疑这是代理问题。如果您可以共享用于创建Service对象的代码,那么它可能会有所帮助。
作为一个启动尝试阅读以下线程
Is not a valid service exception in JAX-WS
我认为您在创建服务时提供的QName不合适。要获取正确的QName,您可能会尝试打开生成的存根。
答案 1 :(得分:0)
事实证明,我缺少的是在我的本地信任库中导入证书(或者更好,当我第一次尝试这样做时,我以为我使用的是正确的信任库,但我不是。)
对于任何可能需要它的人,以下是使用keytool进行解释:http://javarevisited.blogspot.it/2012/03/add-list-certficates-java-keystore.html
另一个选择是使用特定的GUI,如Portecle。