programing

웹 서비스 URL 끝점을 변경하는 방법

yoursource 2022. 11. 21. 23:39
반응형

웹 서비스 URL 끝점을 변경하는 방법

Eclipse 'web service client from a wsdl'을 사용하여 JBoss utils(JAX-WS 호환)를 사용하여 웹 서비스 클라이언트를 생성했습니다.

웹 서비스 WSDL에 대한 URL만 제공했습니다.

이제 웹 서비스 공급자는 웹 서비스의 "클라이언트 엔드포인트응용 프로그램 액세스 URL"을 변경하라고 지시합니다.

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

IMO에서 서비스 엔드포인트(즉, 웹 서비스에 도달하는 위치)를 변경하라고 지시하고 있습니다.클라이언트 엔드포인트(무슨 말인지 알 수 없습니다)는 변경할 수 없습니다.서비스 엔드포인트를 변경하려면 기본적으로 두 가지 옵션이 있습니다.

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

첫 번째 선택지는 다음 명령어를 변경하는 것입니다.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을 가져옵니다.

두 번째 옵션은 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'을 사용합니다.이러한 클래스는 wsdl에서 클래스를 빌드할 때 삽입되었습니다.SomeService라는 서비스 클래스가 있고 다음과 같은 인스턴스를 만드는 경우:

SomeService someService = new SomeService();

Some Service 내부를 보면 컨스트럭터는 다음과 같습니다.

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로 재컴파일할 필요가 없으며 업데이트는 Binding Provider 옵션을 사용한 경우와 마찬가지로 어렵지 않습니다(BTW에서는 동작하지 않았습니다).

끝 주소 속성을 변경하려면 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>

언급URL : https://stackoverflow.com/questions/2490737/how-to-change-webservice-url-endpoint

반응형