[SPRING] 스프링 WS 클라이언트는 SoapHeader를 추가합니다.
SPRING스프링 WS 클라이언트는 SoapHeader를 추가합니다.
SOAP 헤더를 다음과 같이 SOAP 요청을 보내려고합니다.
<SOAP-ENV:Header>
<Security xmlns="http://www.xxx.org/xxx/2003/05">
<UsernameToken><Username>yyyy</Username><Password>xxx</Password>
</UsernameToken></Security></SOAP-ENV:Header>
이를 위해 SoapActionCallback을 사용하여 헤더 요소를 추가하고 있습니다.
SoapActionCallback actionCallBack = new SoapActionCallback("https://aaa.com/bbb.asmx") {
public void doWithMessage(WebServiceMessage msg) {
SoapMessage smsg = (SoapMessage) msg;
smsg.setSoapAction("http://www.xxx.org/yyy/2003/05/SessionCreate");
SoapHeaderElement security = smsg.getSoapHeader().addHeaderElement(new QName("http://www.xxx.org/yyy", "Security"));
security.setText("<UsernameToken><Username>yyyy</Username><Password>xxx</Password></UsernameToken>");
}
};
내 문제는 비누 헤더가 이렇게 생겼어.
<SOAP-ENV:Header><Security xmlns="http://www.xxx.org/yyy/2003/05"><UsernameToken><Username>yyyyy</Username><Password>xxxx</Password></UsernameToken></Security></SOAP-ENV:Header>
결과적으로 요청이 실패합니다.
이 메시지를 올바르게 추가하려면 어떻게해야합니까?
해결법
-
==============================
1.나는 똑같은 것을 원한다. 그러나, 내 자신의 검색에서 나타나는 것처럼, 봄에는 자바의 SOAPMessage와 같은 완전한 기능이 없다. 아마도 헤더에 addChildElement ()가 필요할 것입니다.
나는 똑같은 것을 원한다. 그러나, 내 자신의 검색에서 나타나는 것처럼, 봄에는 자바의 SOAPMessage와 같은 완전한 기능이 없다. 아마도 헤더에 addChildElement ()가 필요할 것입니다.
나는 SoapMessage 건물을 버리고 결국 이걸 가지고 갔다 :
SOAPMessage message = MessageFactory.newInstance(); private void buildHeader(String userName, String password) throws SOAPException{ SOAPHeader header = message.getSOAPHeader(); QName authHeader = new QName(SCHEMA, "AuthenticationHeader", SCHEMA_PREFIX); SOAPHeaderElement authElement = header.addHeaderElement(authHeader); QName userNameHeader = new QName(SCHEMA, "UserName", SCHEMA_PREFIX); SOAPElement userElement = authElement.addChildElement((userNameHeader)); userElement.setTextContent(userName); QName passwordHeader = new QName(SCHEMA, "Password", SCHEMA_PREFIX); SOAPElement passwdElement = authElement.addChildElement(passwordHeader); passwdElement.setTextContent(password); }
위의 접근 방식으로 sendSourceAndReceiveToResult를 사용하여 SOAPMessage를 전달하면 다른 봉투에 SOAPMessage가 래핑되고 이것이 우리가 원하는 것은 아니라는 점에 유의하십시오. :(
업데이트 (2011 년 10 월 25 일) : 다른 솔루션에서이 솔루션을 발견했습니다. 조금 애매하지만 볼 가치가 있습니다. 나는 이것을 시험해 볼 것입니다. 동료 중 한 명이 스프링 통합을 시도해 보았고 Google에서 주제를 찾고 비누 헤더를 사용하여 유망한 자원을 얻었습니다.
업데이트 (10/25/2013) : 라이브러리를 속여서 SOAPMessage를 Spring의 SoapMessage로 랩핑하는 더 빠른 방법이 있음을 발견했습니다.
// message is a SOAPMessage object with custom headers SoapMessage soapMessage = new SaajSoapMessage(message); soapMessage.writeTo(System.out);
아마도 soapmessage를 빌드 한 후에 spring-ws로 라우팅 할 수 있습니다.
from https://stackoverflow.com/questions/19140265/spring-ws-client-add-soapheader by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] RabbitMQ에서 문자열 / json으로 메시지 변환 (0) | 2019.04.23 |
---|---|
[SPRING] Thymeleaf의 산술 연산 (0) | 2019.04.23 |
[SPRING] Spring MVC 3에서 뷰 / 응답 가로 채기 (0) | 2019.04.23 |
[SPRING] java.lang.ClassCastException : java.lang.Class를 java.lang.reflect.ParameterizedType에 캐스트 할 수 없다 (0) | 2019.04.23 |
[SPRING] 스프링 부트 웹 애플리케이션이 JUnit에서 다시 시작해야합니다. (0) | 2019.04.23 |