2012-05-03 4 views
2

배경 지식을 얻기 위해 SOAP를 통해 제 3 자와 상호 작용할 클라이언트를 만들려고합니다. 처음에는 javax.xml.soap SAAJ를 사용하여 이것을 시작했지만 SOAPConnection을 만들 때 시간 초과 옵션은 없다는 것을 알게되었습니다.웹 서비스로서의 Java SOAP 요청?

나는 타임 아웃을 가지고 있지만 시도를 피하고 경고를 받았으며 성능이 현저하지 않은 AXIS를 고려했습니다. 나의 상급반은 이것을 최후의 개조 일로 생각하고있다.

웹 서비스 인 경우에만 컨텍스트 속성에 타임 아웃 설정을 넣을 수 있기 때문에 javax.xml.ws 웹 서비스 경로가 효과적이라고 제안하는 사람들이 있습니다.

여기 상황은 제 3 자에게 WSDL 파일이나 URL이없는 요청을 보내고 있습니다. 원래의 아이디어는 SOAP 요청을 작성하여 보내면 좋을 것입니다. SAAJ에는 시간 제한 설정이 있습니다.

그래서 내 생각에 용서해 주겠다. 요청을 작성하는 SAAJ javax.xml.soap 메서드 대신 웹 서비스와 같은 통신을 모델링하고 구현할 수 있습니까? 그렇다면 누구든지 정말로 나를 지적 할 수 있습니까? 필자가 찾은 대부분의 문서는 WSDL에서 스텁과 클래스를 생성하는 데 의존하는 것 같습니다.

이것은 실제로이 타사 SOAP API에 대한 연결에 대한 시간 제한 설정을 설정하기위한 것입니다.

또한 일부 사용자는 타임 아웃을 설정할 수있는 HttpConnection처럼 처리하려고 제안했지만 일부 단점은 SOAPMessage 유형의 개체를 반환하지 않는다는 것입니다. 그래서 기본적으로

나는이 변화하기 위해 노력하고있어 : 난 정말 javax.ws에 대한 지식이 부족하고

requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 2000); 
requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 2000); 

myService.callMyRemoteMethodWith(myParameter1, myparameter2); 

:

SOAPMessage soapMessage  = messageFactory.createMessage(); 
    SOAPConnection soapConnection = soapConnectionFactory.createConnection(); 

    SOAPPart soapPart   = soapMessage.getSOAPPart(); 
    SOAPEnvelope soapEnvelope = soapPart.getEnvelope(); 
    SOAPHeader soapHeader  = soapEnvelope.getHeader(); 
    SOAPBody soapBody   = soapEnvelope.getBody(); 
    .... 
    soapConnection.call(soapMessage, url); 

더 많은 웹 서비스 같은 것을 속으로 내가이 작업을 수행 할 수 있습니다 프레임 워크 너무 가볍게가주세요 :)

+3

원격 서비스 용 WSDL을 만드는 것으로 간주됩니까? 많은 툴링이 가능합니다. –

+0

+1 그리고 JAX-WS + JAXB 어노테이션을 사용하여 WSDL을 생성하는 것이 좋습니다. – Puce

+0

아마도 옵션 일 수 있습니다. 아마 제 제어 시스템에서 제 3자를위한 WSDL을 생성하는 것이 약간 이상해 보일지 모르지만 이는 옵션입니다. –

답변

0

WSDL 없이는 클라이언트 jar 파일 (스텁)을 만들 수 없습니다. 간단히 말해서 WSDL은 모든 웹 서비스 구현의 중심에 있습니다.

원격 서비스 용 WSDL을 작성하는 것은 원격 서비스가 게시 할 때까지는 장기적으로 실용적이지 않기 때문에 바람직하지 않습니다. 내일이 제 3 자 요청의 매개 변수가 변경되면 WSDL의 해당 변경 사항에 많은 시간과 노력을 기울일 의향이 있습니까? 그것은 많은 정비를 초래할 것입니다.

기본 요구 사항은 SOAPMessage 유형의 객체가 반환되어야한다는 것입니다. 현재 접근 방식을 그대로 유지하는 타임 아웃을 구현하는 방법을 고려해야합니다.