[Java] String to SoapMessage 하는 방법

2023-02-08


사진: Unsplash 의 Libby Penner


1. 방법

 

방법은 간단하다. soap:Envelope 형태를 가지는 String 객체를 바이트로 변경 > inputStream 담고 이후 MessageFactory를 통해 SOAPMessage를 만들면 된다.


import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

   @Test
    public void requst_responseTest() throws Exception {
        String requestResponse =
                "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
                        "  <soap:Body>" +
                            ...
                            ...
                            ...

                        "  </soap:Body>" +
                        "</soap:Envelope>";

        InputStream is = new ByteArrayInputStream(requestResponse.getBytes());
        SOAPMessage request = MessageFactory.newInstance().createMessage(null, is);
    }

 

soap:Body 안에는 각자의 요청정보 및 응답정보에 맞게 변경하면된다.


아래는 SOAPMessage 에서 태그에 존재하는 값을 가져오는 방법이다. 

 

request.getSOAPBody().getElementsByTagName("바디안에 존재하는 태그 이름")
// 바디안에 존재하는 태그 이름 중 순서에 존재하는 값 가져오기
request.getSOAPBody().getElementsByTagName("바디안에 존재하는 태그 이름").item(순서)
 //key와 value값 가져오기
request.getSOAPBody().getElementsByTagName("바디안에 존재하는 태그 이름").item(순서).getAttributes().getNamedItem("아이템명")
 //value만 가져오기
request.getSOAPBody().getElementsByTagName("바디안에 존재하는 태그 이름").item(순서).getAttributes().getNamedItem("아이템명").getNodeValue()

메인 이미지 출처 : 사진: UnsplashLibby Penner