[java] 웹 서비스 URL 끝점을 변경하는 방법은 무엇입니까?

Eclipse ‘wsdl의 웹 서비스 클라이언트’를 사용하여 JBoss 유틸리티 (JAX-WS 호환 가능)를 사용하여 웹 서비스 클라이언트를 생성했습니다.

그래서 제가 제공 한 유일한 것은 웹 서비스 WSDL에 대한 URL이었습니다.

이제 웹 서비스 제공자가 웹 서비스의 “클라이언트 엔드 포인트 애플리케이션 액세스 URL”을 변경하라고합니다.

그것은 무엇이며 어떻게 변경합니까?



답변

IMO, 공급자는 클라이언트 엔드 포인트가 아닌 서비스 엔드 포인트 (예 : 웹 서비스에 도달 할 위치)를 변경하라고 말합니다 (이게 무엇인지 모르겠습니다). 서비스 엔드 포인트를 변경하려면 기본적으로 두 가지 옵션이 있습니다.

바인딩 공급자를 사용하여 끝점 URL 설정

첫 번째 옵션은 (모든 프록시가 인터페이스를 구현 함 ) 의 BindingProvider.ENDPOINT_ADDRESS_PROPERTY속성 값 을 변경하는 것입니다 .BindingProviderjavax.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 가져 오기

두 번째 옵션은 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]));
...


답변

여기에 설명을 추가하기 위해 서비스를 생성 할 때 서비스 클래스는 기본 ‘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>


답변