작성한 소규모 클라이언트를 통해 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
실종을 기본값이 "결코"사용되지 않고 동적 값이 항상 유지되는지 확인하는 것입니다. (받는다는 내 작은 클라이언트 모두)
원격 스키마의 로컬 복사본을 만들어 10.10.10.10 : 80 /을 가리키는 대신 사용할 수 없습니다. – nayakam
@nayakam 나는 정직하게 확신하지 못한다. 스키마를 편집하고 모든 고정 IP를 localhost로 바꾸라고 하시겠습니까? 하지만 운명을 달리면 실패 할 수도 있습니다. – angryip