का उपयोग कर अपने प्रोजेक्ट में SSL त्रुटि से अधिक Jax-WS Axis2 प्रॉक्सी मैं निम्नलिखित परियोजना संरचना है:ProxySelector
मैं एक मॉड्यूल है कि एक युद्ध फ़ाइल का निर्माण कर रहा है और एक बिलाव अनुप्रयोग सर्वर के अंदर तैनात किया जा सकता है। इस मॉड्यूल Axis2 पुस्तकालयों पर निर्भरता है:
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2</artifactId>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-transport-http</artifactId>
</dependency>
<dependency>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-webapp</artifactId>
<type>war</type>
</dependency>
और इस वर्ग के वेब INF तहत conf फ़ोल्डर में एक axis2.xml फ़ाइल है।
अब इस मॉड्यूल में एक यूनिट मॉड्यूल पर निर्भरता है, जिसमें पैकेज का प्रकार जार है।
अब मेरी वेब मॉड्यूल में, मेरे ठूंठ के लिए कोड में मैं कोड निम्नलिखित है:।
GazelleObjectValidator.getInstance() validateObject();
XcpdValidationService जार मॉड्यूल (निर्भरता) में एक कक्षा है और यह विधि SSL पर बाहरी वेब सेवा और प्रॉक्सी का उपयोग करती है।
यह वेब सेवा ग्राहक JAX WS आरआई
द्वारा उत्पन्न होता है, लेकिन इस वर्ग के माता-पिता मॉड्यूल से axis2.xml विन्यास का उपयोग नहीं करता है और यह अपने अक्ष विन्यास है, डिफ़ॉल्ट रूप से एक है, जहां मेरे प्रॉक्सी है किया जा रहा है का उपयोग करता है कॉन्फ़िगर नहीं ...
@WebEndpoint(name = "GazelleObjectValidatorPort")
public GazelleObjectValidator getGazelleObjectValidatorPort() {
return super.getPort(new QName("http://ws.validator.sch.gazelle.ihe.net/", "GazelleObjectValidatorPort"), GazelleObjectValidator.class);
}
विधि ही इस तरह दिखता है:
@WebMethod
@WebResult(name = "validationResult", targetNamespace = "")
@RequestWrapper(localName = "validateObject", targetNamespace = "http://ws.validator.sch.gazelle.ihe.net/", className = "net.ihe.gazelle.schematron.ValidateObject")
@ResponseWrapper(localName = "validateObjectResponse", targetNamespace = "http://ws.validator.sch.gazelle.ihe.net/", className = "net.ihe.gazelle.schematron.ValidateObjectResponse")
public String validateObject(
@WebParam(name = "base64ObjectToValidate", targetNamespace = "")
String base64ObjectToValidate,
@WebParam(name = "xmlReferencedStandard", targetNamespace = "")
String xmlReferencedStandard,
@WebParam(name = "xmlMetadata", targetNamespace = "")
String xmlMetadata)
throws SOAPException_Exception
;
मेरे GazelleObjectValidatorService निम्न प्लग इन द्वारा उत्पन्न होता है:
<plugin>
<groupId>org.apache.axis2</groupId>
<artifactId>axis2-aar-maven-plugin</artifactId>
<version>${axis2.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<id>package-aar</id>
<phase>prepare-package</phase>
<goals>
<goal>aar</goal>
</goals>
</execution>
</executions>
<configuration>
<fileSets>
<fileSet>
<directory>${project.basedir}/src/main/resources/wsdl</directory>
<outputDirectory>META-INF</outputDirectory>
<includes>
<include>**/*.xsd</include>
</includes>
</fileSet>
</fileSets>
<servicesXmlFile>${project.build.outputDirectory}/axis2/services.xml</servicesXmlFile>
<wsdlFile>${project.build.outputDirectory}/wsdl/ClientConnectorService.wsdl</wsdlFile>
</configuration>
</plugin>
मैं अपने ही परिभाषित MyCommonsHttpTransportSender के साथ मेरी axis2.xml विन्यास में transportSender ओवरराइड करने की कोशिश की:
<transportSender name="http"
class="eu.epsos.pt.cc.MyCommonsHTTPTransportSender">
<parameter name="PROTOCOL">HTTP/1.1</parameter>
<parameter name="Transfer-Encoding">chunked</parameter>
और
<transportSender name="https"
class="eu.epsos.pt.cc.MyCommonsHTTPTransportSender">
<parameter name="PROTOCOL">HTTP/1.1</parameter>
<parameter name="Transfer-Encoding">chunked</parameter>
</transportSender>
कि प्रॉक्सी के बारे में जानता है।
लेकिन दुर्भाग्य से वेब सेवा क्लाइंट जार के अंदर है जो युद्ध की निर्भरता है, लेकिन यह मेरी axis2.xml कॉन्फ़िगरेशन का उपयोग नहीं करता है, लेकिन इसकी अपनी धुरी कॉन्फ़िगरेशन का उपयोग करता है, जो इसके बारे में नहीं जानता प्रॉक्सी।
यह निम्न त्रुटि जहां स्पष्ट रूप से देखते हैं कि यह डिफ़ॉल्ट CommonsHTTPTransportSender का उपयोग करता है और इसलिए त्रुटि फेंक कारण बनता है:
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140)
at org.apache.commons.httpclient.protocol.SSLProtocolSocketFactory.createSocket(SSLProtocolSocketFactory.java:130)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.execute(AxisInvocationController.java:578)
at org.apache.axis2.jaxws.core.controller.impl.AxisInvocationController.doInvoke(AxisInvocationController.java:127)
at org.apache.axis2.jaxws.core.controller.impl.InvocationControllerImpl.invoke(InvocationControllerImpl.java:93)
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:373)
... 40 common frames omitted
बच्चे जार में WS ग्राहक एक ही का इस्तेमाल करते हैं यह बताने के लिए एक रास्ता है माता-पिता मॉड्यूल के Axis2 विन्यास (है कि एक परिनियोजन योग्य युद्ध है और Axis2 निर्भरता है?)
अद्यतन:
मेरे युद्ध फ़ाइल एक Axis2 विन्यास, इस युद्ध के स्रोत कोड से, एक सेवा के साथ उत्पन्न किया है wsimport कहा जाता है जो एक जार में है जो अभिभावक युद्ध की निर्भरता है। यह सेवा बाहरी वेब सेवा को कॉल करती है और यह एक्सिस पर होती है (हालांकि axis2.xml कॉन्फ़िगरेशन फ़ाइल का उपयोग नहीं करती है, क्योंकि यह एक JAR के वेब-आईएनएफ फ़ोल्डर में है। एक्सिस के बिना जेएआर में बाहरी वेब सेवा कॉल करने और केवल जेएक्सडब्ल्यूएस का उपयोग करने की कोई संभावना नहीं होगी? यह मेरी समस्याओं का समाधान करेगा ...
पर सेट करने की आवश्यकता है क्या आप अपने प्रॉक्सी चयनकर्ता का उपयोग करना चाहते हैं या आपको बस अपने स्टब के लिए प्रॉक्सी कॉन्फ़िगर करने की आवश्यकता है? – kolossus
मैं सिर्फ यह जानना चाहता हूं कि मैं अपने स्टब के लिए प्रॉक्सी को कैसे कॉन्फ़िगर कर सकता हूं। यदि यह मेरे प्रॉक्सी चयनकर्ता का उपयोग करके व्यवहार्य होगा तो यह बहुत अच्छा होगा। अगर कोई और तरीका है तो यह मेरे लिए भी एक समाधान है। फिलहाल वह सॉकेट से गुजरता है और सिर्फ मेरे प्रॉक्सी चयनकर्ता को अनदेखा करता है क्योंकि एक्सिस –
के अंदर HTTP क्लाइंट का उपयोग कर रहा है, मुझे लगता है कि मुझे पता चला है कि क्यों: एक्सिस जेएक्स-डब्ल्यूएस का सही कार्यान्वयन नहीं है। [मेरा पिछले जवाब के आधार पर] (https://stackoverflow.com/q/30636982/), हमें सुरक्षित सॉकेट फैक्ट्री सेट करने के लिए वहां दो दृष्टिकोणों में से एक का उपयोग करना चाहिए ('JAXWSProperties.SSL_SOCKET_FACTORY' के बजाय) मेरे जवाब में। आपको अपना उत्तर भी हटा देना चाहिए और – kolossus