Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用HTTPS wsdl文件而不下载到本地计算机_Java_Web Services_Https_Wsdl_Client - Fatal编程技术网

如何在java中使用HTTPS wsdl文件而不下载到本地计算机

如何在java中使用HTTPS wsdl文件而不下载到本地计算机,java,web-services,https,wsdl,client,Java,Web Services,Https,Wsdl,Client,我刚刚实现了我的第一个Web服务(客户端)。URL是HTTPS。我试图直接使用这个网址,但我做不到。所以我下载了WSDL文件,一切正常。现在的问题是,当服务定义更改时,我将不知道,因为我编写的代码基于我保存的本地WSDL。回到原点。是否可以直接使用HTTPS URL而不下载它。 我在尝试使用URL实现Web服务时遇到的异常有: Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.f

我刚刚实现了我的第一个Web服务(客户端)。URL是HTTPS。我试图直接使用这个网址,但我做不到。所以我下载了WSDL文件,一切正常。现在的问题是,当服务定义更改时,我将不知道,因为我编写的代码基于我保存的本地WSDL。回到原点。是否可以直接使用HTTPS URL而不下载它。
我在尝试使用URL实现Web服务时遇到的异常有:

Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:151)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:101)
at javax.xml.ws.Service.<init>(Unknown Source)
at org.tempuri.Service.<init>(Service.java:43)
at org.tempuri.ServiceSoap_ServiceSoap_Client.main(ServiceSoap_ServiceSoap_Client.java:65)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:100)
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:204)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:149)
... 4 more

Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'https myipaddress service.asmx?WSDL'.: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2198)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2390)
at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2422)
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:263)
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:206)
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:98)
... 6 more

Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names present
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2188)
... 11 more

Caused by: java.security.cert.CertificateException: No subject alternative names present
at sun.security.util.HostnameChecker.matchIP(Unknown Source)
at sun.security.util.HostnameChecker.match(Unknown Source)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkIdentity(Unknown Source)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
线程“main”javax.xml.ws.webserviceception中的异常:org.apache.cxf.service.factory.ServiceConstructionException:未能创建服务。 位于org.apache.cxf.jaxws.serviceinpl.(serviceinpl.java:151) 位于org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:101) 位于javax.xml.ws.Service。(未知源) 位于org.tempuri.Service.(Service.java:43) 位于org.tempuri.ServiceSoap\u ServiceSoap\u Client.main(ServiceSoap\u ServiceSoap\u Client.java:65) 原因:org.apache.cxf.service.factory.ServiceConstructionException:未能创建服务。 位于org.apache.cxf.wsdl11.WSDLServiceFactory.(WSDLServiceFactory.java:100) 位于org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:204) 位于org.apache.cxf.jaxws.serviceinpl.(serviceinpl.java:149) ... 4更多 原因:javax.wsdl.WSDLException:WSDLException:faultCode=PARSER\u错误:解析“https myipaddress service.asmx?wsdl”时出现问题:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:不存在主题替代名称 位于com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2198) 位于com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2390) 位于com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2422) 位于org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:263) 位于org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:206) 位于org.apache.cxf.wsdl11.WSDLServiceFactory.(WSDLServiceFactory.java:98) ... 还有6个 原因:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:不存在主题替代名称 位于com.sun.net.ssl.internal.ssl.Alerts.getSSLException(未知源) 位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(未知源) 位于com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(未知源) 位于com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(未知源) 位于com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(未知源) 位于com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(未知源) 位于com.sun.net.ssl.internal.ssl.Handshaker.processLoop(未知源) 位于com.sun.net.ssl.internal.ssl.Handshaker.process_记录(未知源) 位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(未知源) 位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(未知源) 位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(未知源) 位于com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(未知源) 位于sun.net.www.protocol.https.HttpsClient.afterConnect(未知来源) 位于sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(未知源) 位于sun.net.www.protocol.http.HttpURLConnection.getInputStream(未知源) 位于sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(未知源) 位于com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(未知源) 位于com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(未知源) 位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知源) 位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(未知源) 位于com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(未知源) 位于com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(未知源) 位于com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(未知源代码) 位于com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2188) ... 还有11个 原因:java.security.cert.CertificateException:不存在主题替代名称 位于sun.security.util.HostnameChecker.matchIP(未知源) 位于sun.security.util.HostnameChecker.match(未知源) 位于com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkIdentity(未知源) 位于com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(未知源)
请帮忙。提前感谢。

简单的答案是肯定的,可以使用HTTPS检索WSDL

“不存在主题替代名称”是Java告诉您正在使用的URL的主机名与主机证书中的公共名称(CN)不匹配的模糊方式

正确的解决方案是使用与证书匹配的主机名,或者获得一个新证书,其中包含正确的主机名

中描述了一种变通方法