Java 호출 웹 서비스
이 기사에서는 Java 클래스에서 SOAP
웹 서비스 호출을 수행하는 방법을 설명합니다.
SOAP
웹 서비스
SOAP
는 Simple Object Access Protocol
을 의미합니다. 웹 서비스는 이 XML
기반 인터페이스를 통해 액세스할 수 있습니다.
W3C
는 두 앱 간의 통신을 위해 SOAP
를 권장합니다. SOAP
프로토콜은 XML 기반입니다.
특정 플랫폼이나 언어에 대한 선호도가 없습니다. SOAP
를 활용하여 다른 프로그래밍 언어 앱과 통신할 수 있습니다.
Java 클래스에서 SOAP
웹 서비스 호출
경우에 따라 웹 서비스
라이브러리보다 Java 클래스를 활용하여 SOAP
서비스를 호출하는 것이 더 빠르고 도움이 될 수 있습니다. 예를 들어 웹 서비스
라이브러리를 사용하여 클라이언트 프록시를 생성하거나 응답의 일부 작고 특수한 부분을 원하는 경우 문제가 발생할 수 있습니다.
Java 라이브러리를 사용하지 않고 간단한 Java 코드 조각에서 HTTP
또는 HTTPS
프로토콜을 통한 SOAP
요청입니다.
다음은 Java 클래스에서 SOAP 웹 서비스
를 호출하는 단계입니다.
WSDL
먼저 WSDL
파일을 열어 Java 클래스에서 SOAP
웹 서비스 호출을 만듭니다. WSDL
파일에서 XSD
, SOAP 작업
및 SOAP 주소
위치를 확인하십시오.
SOAP
요청 및 응답의 이름은 각각 getUserDetailsRequest
및 getUserDetailsResponse
입니다. 또한 요청의 입력 매개변수가 있습니다.
여기에는 이름
이라는 하나의 인수만 존재하며 이는 문자열
입니다.
...
<xs:element name="getUserDetailsRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getUserDetailsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="users" type="tns:user" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
...
XML 요청
응답 XML
구조를 생성하는 데 Java 코드가 필요하지 않습니다. 서버에서 가져오기 때문입니다. 그러나 SOAP 서비스
에 대한 입력으로 제출해야 하므로 요청 XML
구조를 생성하려면 Java 코드가 필요합니다.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<getUserDetailsRequest xmlns="https://roytuts.com/UserService">
<name>User Name</name>
</getUserDetailsRequest>
</soapenv:Body>
</soapenv:Envelope>
‘SOAP’ 주소
SOAP
서비스의 엔드포인트 URL 역할을 하는 SOAP
주소 위치를 찾으십시오. Java의 HttpURLConnection
API를 사용하여 이 엔드포인트에 연결합니다.
‘SOAP’ 동작
그런 다음 SOAP
작업으로 활용될 작업 이름을 찾아야 합니다. getUserDetails
는 여기에 있습니다.
SOAP
클라이언트 생성
우리는 모든 필수 사항을 결정했으며 사용자 지정 Java 클래스를 개발할 준비가 되었습니다.
package com.roytuts.soap.client;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class SoapClient {
public static void main(String[] args) throws IOException {
// Webservice HTTP request configurations
String wsEndPoint = "http://localhost:9999/ws";
URL url = new URL(wsEndPoint);
URLConnection connection = url.openConnection();
HttpURLConnection http = (HttpURLConnection) connection;
ByteArrayOutputStream bout = new ByteArrayOutputStream();
String xmlInput = "<soapenv:Envelope xmlns:soapenv=" http
: // schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><getUserDetailsRequest
// xmlns="https://roytuts.com/UserService"><name>User
// Name</name></getUserDetailsRequest></soapenv:Body></soapenv:Envelope>";
byte[] buffer = new byte[xmlInput.length()];
buffer = xmlInput.getBytes();
bout.write(buffer);
byte[] b = bout.toByteArray();
String stringResponse = "";
String stringOutput = "";
String SOAPAction = "getUserDetails";
http.setRequestProperty("Content-Length", String.valueOf(b.length));
http.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
http.setRequestProperty("SOAPAction", SOAPAction);
http.setRequestMethod("POST");
http.setDoOutput(true);
http.setDoInput(true);
OutputStream out = http.getOutputStream();
out.write(b);
out.close();
InputStreamReader isr = new InputStreamReader(http.getInputStream(), Charset.forName("UTF-8"));
BufferedReader in = new BufferedReader(isr);
while ((stringResponse = in.readLine()) != null) {
stringOutput = stringOutput + stringResponse;
}
String formattedSOAPResponse = formatXML(stringOutput);
System.out.println(formattedSOAPResponse);
}
private static String formatXML(String unformattedXml) {
try {
Document document = parseXmlFile(unformattedXml);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformerFactory.setAttribute("indent-number", 3);
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(document);
StreamResult xmlOutput = new StreamResult(new StringWriter());
transformer.transform(source, xmlOutput);
return xmlOutput.getWriter().toString();
} catch (TransformerException e) {
throw new RuntimeException(e);
}
}
private static Document parseXmlFile(String in) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(in));
return db.parse(is);
} catch (IOException | ParserConfigurationException | SAXException e) {
throw new RuntimeException(e);
}
}
}
HTTPS 호출
아래 코드 샘플의 아이디어를 사용하여 HTTPS
연결을 통해 SOAP
웹 서비스를 호출합니다. 이 예는 GET
및 POST
메소드를 사용하여 일반 Java 코드에서 SOAP
웹 서비스에 연결하는 방법을 보여줍니다.
아래 코드는 HTTPS
프로토콜을 사용하는 방법을 보여줍니다. 따라서 응용 프로그램의 코드를 개발하는 동안 모든 프로그래밍 표준을 고려하십시오.
package com.roytuts.java.soap.https.connection;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class JavaSoapHttpsClient {
public static void main(String[] args) throws Exception {
invokeSoapService(
"https://postman-echo.com/post", "POST", "<xml><body>SAOP request</body></xml>");
invokeSoapService("https://www.google.com", "GET", null);
}
public static void invokeSoapService(
final String url, final String httpMethod, final String requestXML) throws IOException {
URL myUrl = new URL(url);
HttpURLConnection http = (HttpsURLConnection) myUrl.openConnection();
http.setDoOutput(true);
http.setRequestMethod(httpMethod);
OutputStreamWriter out = null;
if ("POST".equals(httpMethod) && requestXML != null) {
out = new OutputStreamWriter(conn.getOutputStream());
out.append(requestXML);
}
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
System.out.println("Response Code: " + conn.getResponseCode());
System.out.print("Response Text: ");
while ((inputLine = br.readLine()) != null) {
System.out.println(inputLine);
}
if (out != null) {
out.flush();
out.close();
}
br.close();
}
}
이 기사에서는 Java 클래스에서 SOAP
웹 서비스 호출을 수행하는 방법을 설명했습니다. 이 문서에서는 다양한 단계에 대해 설명합니다.
사용자는 단계에 따라 Java 클래스에서 SOAP
웹 서비스 호출을 호출할 수 있습니다.