[SPRING] Java의 SOAP 헤더에 자식 요소를 추가하는 방법
SPRINGJava의 SOAP 헤더에 자식 요소를 추가하는 방법
자바 스프링 웹 서비스에서 SOAP 헤더에 자식 요소를 추가하는 방법
나는 두 가지 접근법을 시도했지만 아무것도 효과가 없다.
첫 번째 접근법 :-
soapHeaderString.append("<tem:Culture>en_Us</tem:Culture><tem:AgentCode>PumpkinSafari</tem:AgentCode><tem:PartnerID></tem:PartnerID><tem:Password>PMP22#in</tem:Password>");
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// Here we create a Source Tree
StringSource stringSource = new StringSource(soapHeaderString.toString());
transformer.transform(stringSource, soapHeader.getResult());
하지만 그것은 나에게 오류를주고있다
The prefix "tem" for element "tem:Culture" is not bound.
두 번째 접근법 :-
SoapHeaderElement headerElement=soapMessage.getSoapHeader().addHeaderElement(new QName("http://tempuri.org/", "SOAPHeaderAuth","tem"));
headerElement.setText(soapHeaderString.toString());
이스케이프 처리되지 않은 시퀀스를 생성하므로 서비스 공급자가 요청을 이해할 수 없어 오류가 발생합니다.
문제를 해결하기 위해해야 할 일을 도와주세요.
해결법
-
==============================
1.예, 제 경우에도 같은 오류가 발생합니다. "wsse : username"요소의 접두사 "username"이 바인딩되지 않았습니다. 네임 스페이스 선언을 추가하기 위해 모든 것을 시도했습니다. 그러나 작동하지 않습니다!
예, 제 경우에도 같은 오류가 발생합니다. "wsse : username"요소의 접두사 "username"이 바인딩되지 않았습니다. 네임 스페이스 선언을 추가하기 위해 모든 것을 시도했습니다. 그러나 작동하지 않습니다!
"마침내", 나는 지난 밤에 해결 방법으로 스프링 org.springframework.ws.soap.SoapHeader에서 javax.xml.soap.SOAPHeader로 변환 할 수있었습니다. 그리고 지금은 문제가 없습니다!
SOAPMessage soapMessage = ((SaajSoapMessage) message).getSaajMessage(); SOAPHeader header = soapMessage.getSOAPHeader(); SOAPHeaderElement security = header.addHeaderElement(new QName(SCHEMA, "Security", SCHEMA_PREFIX)); SOAPElement usernameToken = security.addChildElement("UsernameToken", SCHEMA_PREFIX); SOAPElement usernameElement = usernameToken.addChildElement("Username", SCHEMA_PREFIX); SOAPElement passwordElement = usernameToken.addChildElement("Password", SCHEMA_PREFIX); usernameElement.setTextContent(username); passwordElement.setTextContent(password);
이를 통해 스프링 비누 헤더 자식 요소에 네임 스페이스 선언을 추가 할 수있었습니다!
-
==============================
2.JAX-WS 사용자
JAX-WS 사용자
메시지 처리기를 사용하는 것이 좋습니다.
http://www.javadb.com/using-a-message-handler-to-alter-the-soap-header-in-a-web-service-client
스프링 웹 서비스 사용자
비슷한 개념이 있습니다.
http://arcanetechnotes.blogspot.com/2008/12/modifying-soap-headers-with-spring-web.html
이 질문은 tem 네임 스페이스를 이해할 수 없으므로 네임 스페이스를 헤더에 등록 할 수 있습니다.
soapHeader.addNamespaceDeclaration("tem", "http://whatever.namespace.com/");
-
==============================
3.webparam에서 "header = true"속성 사용 처럼
webparam에서 "header = true"속성 사용 처럼
@WebMethod(operationName = "someMethod") public String someMethod(@WebParam(name = "yourBeanObj") YourBeanObjClass yourBeanObj, @WebParam(header = true, mode = WebParam.Mode.IN, name = "username") String userName, @WebParam(header = true, mode = WebParam.Mode.IN, name = "password") String pwd) { //todo stuff }
위의 예에 따라 "yourBeanObj"는 soap body에 추가되고 "username"및 "password"는 soap header에 추가됩니다.
from https://stackoverflow.com/questions/16322634/how-to-add-child-element-in-soap-header-in-java by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링에서 @NumberFormat에 다른 로케일 사용 (0) | 2019.09.14 |
---|---|
[SPRING] JPA 및 Spring 부트에 대한 검색 기능 구현 [닫기] (0) | 2019.09.14 |
[SPRING] Thymeleaf-Javascript 코드 내에서 모델 속성을 반복 (0) | 2019.09.13 |
[SPRING] JPA에서 트랜잭션을 롤백하는 방법은 무엇입니까? (0) | 2019.09.13 |
[SPRING] 파일 다운로드 자바 봄 휴식 API (0) | 2019.09.13 |