[SPRING] org.springframework.ws.WebServiceMessage에 SoapHeader를 추가하십시오.
SPRINGorg.springframework.ws.WebServiceMessage에 SoapHeader를 추가하십시오.
어떻게 org.springframework.ws.WebServiceMessage의 비누 헤더에 객체를 추가 할 수 있습니까?
이것은 제가 끝내기 위해 찾고있는 구조입니다 :
<soap:Header>
<credentials xmlns="http://example.com/auth">
<username>username</username>
<password>password</password>
</credentials>
</soap:Header>
해결법
-
==============================
1.기본적으로 클라이언트에서 WebServiceMessageCallback을 사용하여 메시지를 작성한 후 전송하기 전에 수정해야합니다. 코드의 나머지 부분은 @skaffman에 의해 매우 정확하게 설명되었으므로 전체 내용이 다음과 같이 보일 수 있습니다.
기본적으로 클라이언트에서 WebServiceMessageCallback을 사용하여 메시지를 작성한 후 전송하기 전에 수정해야합니다. 코드의 나머지 부분은 @skaffman에 의해 매우 정확하게 설명되었으므로 전체 내용이 다음과 같이 보일 수 있습니다.
public void marshalWithSoapActionHeader(MyObject o) { webServiceTemplate.marshalSendAndReceive(o, new WebServiceMessageCallback() { public void doWithMessage(WebServiceMessage message) { try { SoapMessage soapMessage = (SoapMessage)message; SoapHeader header = soapMessage.getSoapHeader(); StringSource headerSource = new StringSource("<credentials xmlns=\"http://example.com/auth\">\n + <username>"+username+"</username>\n + <password>"+password"+</password>\n + </credentials>"); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.transform(headerSource, header.getResult()); } catch (Exception e) { // exception handling } } }); }
개인적으로, 나는 Spring-WS가 그런 기본적인 필요를 위해 열심히 열중하고, SWS-479를 고쳐야한다는 것을 발견했다.
-
==============================
2.당신은 아래와 같이 할 수 있습니다 :
당신은 아래와 같이 할 수 있습니다 :
public class SoapRequestHeaderModifier implements WebServiceMessageCallback { private final String userName = "user"; private final String passWd = "passwd"; @Override public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException { if (message instanceof SaajSoapMessage) { SaajSoapMessage soapMessage = (SaajSoapMessage) message; MimeHeaders mimeHeader = soapMessage.getSaajMessage().getMimeHeaders(); mimeHeader.setHeader("Authorization", getB64Auth(userName, passWd)); } } private String getB64Auth(String login, String pass) { String source = login + ":" + pass; String retunVal = "Basic " + Base64.getUrlEncoder().encodeToString(source.getBytes()); return retunVal; } }
그때
Object response = getWebServiceTemplate().marshalSendAndReceive(request, new SoapRequestHeaderModifier());
-
==============================
3.WebServiceMessage를 헤더를 수정하는 데 사용할 수있는 getSoapHeader () 메서드가있는 SoapMessage로 캐스팅해야합니다. 차례로 SoapHeader에는 getResult () (Transformer.transform () 작업의 출력으로 사용될 수 있음)를 비롯한 다양한 요소 추가 메서드가 있습니다.
WebServiceMessage를 헤더를 수정하는 데 사용할 수있는 getSoapHeader () 메서드가있는 SoapMessage로 캐스팅해야합니다. 차례로 SoapHeader에는 getResult () (Transformer.transform () 작업의 출력으로 사용될 수 있음)를 비롯한 다양한 요소 추가 메서드가 있습니다.
from https://stackoverflow.com/questions/2274378/add-soapheader-to-org-springframework-ws-webservicemessage by cc-by-sa and MIT license