2017-12-13 5 views
0

작성한 소규모 클라이언트를 통해 SOAP 서비스를 호출하려고합니다. maven을 사용하여 wsdl 유형을 구문 분석하고 작성합니다.WSDL에서 클라이언트를 만들 수 없습니다.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>jaxws-maven-plugin</artifactId> 
    <version>1.12</version> 
    <configuration> 
     <wsdlDirectory>${basedir}/src/main/resources/META-INF/wsdl</wsdlDirectory> 
     <wsdlLocation>http://localhost/wsdl/sample.wsdl</wsdlLocation> 
     <packageName>com.sample</packageName> 
     <keep>true</keep> 
     <sourceDestDir>${basedir}/target/generated-sources/</sourceDestDir> 
    </configuration> 
    <executions> 
     <execution> 
      <goals> 
       <goal>wsimport</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

내가 주어진 된 WSDL 계약이 "하드 엔드 포인트"세부 사항이 있습니다

... 
<wsdl:types> 
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="http://sample.com/sample/1.0"> 
     <xsd:include 
      schemaLocation="http://10.10.10.10:80/samplews/wsdl/eventmessagesws.xsd" /> 
     <xsd:include 
      schemaLocation="http://10.10.10.10:80/samplews/wsdl/samplews.xsd" /> 
    </xsd:schema> 
</wsdl:types> 
... 

<wsdl:port name="samplePort" binding="tns:sampleServiceSOAP"> 
    <soap:address location="http://10.10.10.10:80/samplews" /> 
</wsdl:port> 

내가 원래 눈치 챘을하면 요소의 기본 위치는 호출을 만드는 데 사용됩니다 있다는 것입니다 사전 정의 된 목표 그러나이 동작은 내 응용 프로그램에서 원하지 않습니다. 대신 동적으로 조정하고 싶습니다. 따라서, 연구는 나를이 게시물로 안내합니다 : overriding or setting web service endpoint at runtime for code generated with wsimport . 나는 다음과 같은 코드로, 기본 바인딩을 오버라이드 (override)하는 것을 감안할 때

가 오른쪽 대상 시스템이 호출됩니다 :

final String endpoint = "http://20.20.20.10:80/samplews"; 
final SampleService service = new SampleService(); 
final SamplePortType samplePort = service.getSamplePort(); 

final BindingProvider provider = (BindingProvider) samplePort; 
provier.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint); 
samplePort.doSomething(); 

는 이렇게, 나는 문제를 해결하기 위해 관리. 즉, 작은 클라이언트를 호출 할 때 올바른 대상이 메시지를 받게됩니다.

그러나 현재주의해야 할 문제는 호스트 10.10.10.10:80이 다운되면 20.20.20.10:80에 대한 재정의 된 바인딩이 남아 있지만 클라이언트에서 연결 예외가 발생한다는 것입니다. 오류 다음 상태 :

Caused by: javax.wsdl.WSDLException: WSDLException (at /wsdl:definitions/wsdl:types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing 'http://10.10.10.10:80/samplews/wsdl/eventmessagesws.xsd'.: java.net.ConnectException: Connection refused: connect 

내가 점에서 나는 다음과 같은 오류 얻을 것, 받는다는 내 클라이언트를 다시 컴파일 할 때 같은 경우도 마찬가지입니다 : 내가

parsing WSDL... 
[ERROR] Connection timed out: connect 

실종을 기본값이 "결코"사용되지 않고 동적 값이 항상 유지되는지 확인하는 것입니다. (받는다는 내 작은 클라이언트 모두)

+0

원격 스키마의 로컬 복사본을 만들어 10.10.10.10 : 80 /을 가리키는 대신 사용할 수 없습니다. – nayakam

+0

@nayakam 나는 정직하게 확신하지 못한다. 스키마를 편집하고 모든 고정 IP를 localhost로 바꾸라고 하시겠습니까? 하지만 운명을 달리면 실패 할 수도 있습니다. – angryip

답변

1

Caused by: javax.wsdl.WSDLException: WSDLException (at /wsdl:definitions/wsdl:types/xsd:schema): faultCode=PARSER_ERROR: Problem parsing ' http://10.10.10.10:80/samplews/wsdl/eventmessagesws.xsd '.: java.net.ConnectException: Connection refused: connect

동적 엔드 포인트를 재설정 요청을 리디렉션 미리 정의 된 원격 호스트처럼, 내 의견을 정교합니다. eventmessagesws.xsd 및 samplews.xsd의 로컬 복사본을 http://10.10.10.10:80에서 만들어 리소스 디렉토리에 배치 할 수 있습니다. 로컬 복사본을 가리 키도록 schemaLocation을 업데이트합니다.

<wsdl:types> 
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     targetNamespace="http://sample.com/sample/1.0"> 
     <xsd:include 
      schemaLocation="src/main/resources/samplews/wsdl/eventmessagesws.xsd" /> 
     <xsd:include 
      schemaLocation="src/main/resources/samplews/wsdl/samplews.xsd" /> 
    </xsd:schema> 
</wsdl:types> 
+0

이 동작 할 수 있습니다. 나는 그것을 줄 것이다. – angryip

+0

나는 스키마를 다운로드하고 wsdl을 기준으로 배치하여 매력처럼 작동했습니다. 좋은 캐치! – angryip

+0

@angryip 그것이 당신을 위해 일해 주어서 다행입니다. – nayakam

관련 문제