2011-08-11 2 views
14

WSDL 위치에 비례하여 또는 적어도 서버와 관련하여 비누 : 주소 위치를 WSDL에 둘 수 있습니까? 예를 들어 내가 쓰고 싶은 :상대 WSDL 비누 : 주소 위치

<soap:address location="https://exampleserver.com/axis2/services/ExampleService" /> 

같이

<soap:address location="/axis2/services/ExampleService" /> 

이 테스트 서버와 같은 여러 서버에 빠른 전개를 가능하게한다. 또한 axis2c의 경우 HTTP 또는 HTTPS 둘 다에서 서비스를 사용하려면 내 서비스를 사용하는 개발자가 단순히 기본 위치 인 "WSDL"에서 WSDL을 가져올 수 없으므로 수명이 더 오래갑니다.

+0

내 서비스를 사용하는 개발자는 단순히 wsdl을 기본 위치에서 가져올 수 없기 때문에 _life가 더 어려워집니다. "WSDL"_이 부분을 이해하지 못합니다. 상대적 주소 대신 절대 주소가 WSDL에있는 경우 인생이 어려워지는 이유는 무엇입니까? –

+0

주소가 하나 뿐이므로 주소가 2 개 (https 하나 및 http 하나) 필요합니다. – Mihai

+0

웹 서비스를 사용할 때 SOAP 주소를 완전히 무시하고 클라이언트에서이를 무시합니다. 서버를 작성할 때 무작위이지만 유효한 것을 작성하십시오. –

답변

7

WSDL은 웹 서비스와 상호 작용하는 데 필요한 메시지 형식, 유형, 매개 변수 등을 클라이언트에 설명합니다. 이 코드는 WSDL2C 같은 도구에서 상호 작용에 필요한 코드를 생성하는 데 사용됩니다.

하지만 서비스를 HTTP 또는 HTTPS로 노출해도 클라이언트 스텁 코드는 동일합니다. 각 엔드 포인트 주소에 대한 클라이언트 스텁을 다시 생성하지 않습니다. 클라이언트는 변하지 않는 액세스 포인트입니다.

이 주소는 생성 된 클라이언트 코드에 하드 코드되어서는 안되며 클라이언트 응용 프로그램 내에 구성 가능한 URL이어야합니다.

물론, WSDL 내에 URL이 지정되어 있고 dev 서버에 웹 서비스를 배포 한 다음 준비 및 다음 단계로 진행할 때 불편합니다. 엔드 포인트는 각 환경마다 다를 수 있지만 (HTTP + HTTPS의 경우 2를 곱할 수 있음) 코드를 재생성하지 않기 때문에 개발자는 영향을받지 않습니다.

웹 서비스에 액세스 할 때 무언가 또는 절대 주소와 관련이 있더라도 다른 주소 (개발자, 준비 서버 및 제공 서버)가 계속 남아 있습니다. 따라서 액세스 포인트를 클라이언트 구성으로 관리해야하므로 WSDL 내부에 상대 주소를 갖는 것이 얼마나 도움이되는지 알지 못합니다.

+2

PHP에서 웹 서비스에 액세스하는 간단한 방법은 SoapClient 생성자에서 WSDL 위치를 지정하는 것입니다. 서비스 주소는 wsdl에서 가져옵니다. 올바르지 않은 것이 wsdl에 있으면 서비스 클라이언트가 올바른 것을 수동으로 지정해야합니다. 주소를 wsdl에서 동적으로 변경하지 않는 한, http 및 https 모두에서 서비스를 사용하는 경우 잘못된 주소를 사용해야합니다. – Mihai

3

길게 검색 한 후에 나는 soap:addresslocation 속성이 절대 URL이어야한다는 것을 거의 확신합니다. 개발, 테스트 및 생산과 같은 다양한 환경에서 작업 할 경우 상황이 더욱 복잡해집니다.

아마도 클라이언트 측에서 설정 파일 (예 : https://exampleserver.com)에서 URL의 첫 번째 부분과 WSDL의 마지막 부분 (예 : /axis2/services/ExampleService)을 읽고이를 결합하여 절대 경로를 구축 할 수 있습니다 . 전자는 환경 간을 전환 할 수있게합니다.

+0

이것이 내가 원하는 것입니다. 그러나 나는 그것을 끝내는 것처럼 보이지 않습니다. – elcool

4

WSDL을 가져 오는 방법에는 두 가지가 있습니다.

하드 코딩 된 WSDL 예를 들어, 제공됩니다

하나는 :

https://hostname/contextname/services/myAPIService/myAPI.wsdl 

하고 생성 된 WSDL 예를 들어, 제공되는 또 다른 하나

https://hostname/contextname/services/myAPIService?wsdl 

당신은 동적 옵션을 사용하는 경우 다음 코드를 사용합니다 :

req.getRequestURL().toString(); 

생성 된 WSDL에 사용될 URL을 얻으십시오. 이 코드는 ListingAgent 클래스 (org.apache.axis2.transport.http 패키지에 있음)에있다.

상대 위치를 원한다면 질문에 언급 한 내용을 여러 서버에서 사용하고 있어야하므로 동적 옵션을 사용해야합니다.

동적 옵션에서 발견 된 한 가지 문제점은 원래 WSDL에서 위치가 HTTP를 사용하는 경우 생성 된 URL에서 HTTPS를 사용하더라도 여전히 HTTP를 사용한다는 것입니다. (이것은 내 프로젝트에서 사용하는 버전 1.5에서 발생합니다.)

로드 균형 조정기를 사용하는 경우 생성자 WSDL이 균형 조정기 대신 최종 서버 위치와 함께 생성되기 때문에 또 다른 문제가 발생합니다. 이 옵션은 AxisServlet 및 ListingAgent 클래스를 확장하여 위에서 언급 한 코드를 대체하는 것입니다.