Eclipse 'wsdl의 웹 서비스 클라이언트'를 사용하여 JBoss 유틸리티 (JAX-WS 호환 가능)를 사용하여 웹 서비스 클라이언트를 생성했습니다.
그래서 제가 제공 한 유일한 것은 웹 서비스 WSDL에 대한 URL이었습니다.
이제 웹 서비스 제공자가 웹 서비스의 "클라이언트 엔드 포인트 애플리케이션 액세스 URL"을 변경하라고합니다.
그것은 무엇이며 어떻게 변경합니까?
Eclipse 'wsdl의 웹 서비스 클라이언트'를 사용하여 JBoss 유틸리티 (JAX-WS 호환 가능)를 사용하여 웹 서비스 클라이언트를 생성했습니다.
그래서 제가 제공 한 유일한 것은 웹 서비스 WSDL에 대한 URL이었습니다.
이제 웹 서비스 제공자가 웹 서비스의 "클라이언트 엔드 포인트 애플리케이션 액세스 URL"을 변경하라고합니다.
그것은 무엇이며 어떻게 변경합니까?
답변:
IMO, 공급자는 클라이언트 엔드 포인트가 아닌 서비스 엔드 포인트 (예 : 웹 서비스에 도달 할 위치)를 변경하라고 말합니다 (이게 무엇인지 모르겠습니다). 서비스 엔드 포인트를 변경하려면 기본적으로 두 가지 옵션이 있습니다.
첫 번째 옵션은 (모든 프록시가 인터페이스를 구현 함 ) 의 BindingProvider.ENDPOINT_ADDRESS_PROPERTY
속성 값 을 변경하는 것입니다 .BindingProvider
javax.xml.ws.BindingProvider
...
EchoService service = new EchoService();
Echo port = service.getEchoPort();
/* Set NEW Endpoint Location */
String endpointURL = "http://NEW_ENDPOINT_URL";
BindingProvider bp = (BindingProvider)port;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL);
System.out.println("Server said: " + echo.echo(args[0]));
...
단점은 원본 WSDL에 여전히 액세스 할 수있는 경우에만 작동한다는 것입니다. 권장하지 않습니다.
두 번째 옵션은 WSDL에서 엔드 포인트 URL을 가져 오는 것입니다.
...
URL newEndpoint = new URL("NEW_ENDPOINT_URL");
QName qname = new QName("http://ws.mycompany.tld","EchoService");
EchoService service = new EchoService(newEndpoint, qname);
Echo port = service.getEchoPort();
System.out.println("Server said: " + echo.echo(args[0]));
...
wsimport
도구는 get[Service]Port
더 이상 메서드를 사용하여 코드를 생성하지 않는다는 점을 지적 할 가치가 있습니다. 대신 get[Service]
결과 개체를으로 호출 하고 캐스팅하여 BindingProvider
이러한 종류의 속성을 설정합니다.
여기에 설명을 추가하기 위해 서비스를 생성 할 때 서비스 클래스는 기본 'wsdlLocation'을 사용합니다. 기본 'wsdlLocation'은 클래스가 wsdl에서 빌드 될 때 삽입되었습니다. 따라서 SomeService라는 서비스 클래스가 있고 다음과 같은 인스턴스를 생성하는 경우 :
SomeService someService = new SomeService();
SomeService 내부를 살펴보면 생성자가 다음과 같이 보이는 것을 볼 수 있습니다.
public SomeService() {
super(__getWsdlLocation(), SOMESERVICE_QNAME);
}
따라서 다른 URL을 가리 키도록하려면 URL 인수를받는 생성자를 사용하면됩니다 (qname 및 기능 설정을위한 6 개의 생성자가 있습니다). 예를 들어, 포트 9999에서 수신 대기하는 로컬 TCP / IP 모니터를 설정하고 해당 URL로 리디렉션하려는 경우 :
URL newWsdlLocation = new URL("http://theServerName:9999/somePath");
SomeService someService = new SomeService(newWsdlLocation);
그러면 서비스 내에서이 생성자가 호출됩니다.
public SomeService(URL wsdlLocation) {
super(wsdlLocation, SOMESERVICE_QNAME);
}
기존 주소 속성 을 변경 하기 위해 @Femi까지 가지 않을 것 입니다. 정의 섹션에 새 서비스를 쉽게 추가 할 수 있습니다.
<wsdl:service name="serviceMethodName_2">
<wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName">
<soap:address location="http://new_end_point_adress"/>
</wsdl:port>
</wsdl:service>
이것은 WSDL을 Java로 재 컴파일 할 필요가 없으며 업데이트하는 것이 BindingProvider 옵션을 사용하는 것보다 더 어렵지 않습니다.
끝 주소 속성을 변경하려면 wsdl 파일을 편집합니다.
<wsdl:definitions.......
<wsdl:service name="serviceMethodName">
<wsdl:port binding="tns:serviceMethodNameSoapBinding" name="serviceMethodName">
<soap:address location="http://service_end_point_adress"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>