Commit a17397c1 by Patryk Czarnik

serwlet SAAJ - pierwsza obsługa POST

parent 385b8090
......@@ -5,12 +5,19 @@ import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.xml.soap.*;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
private static final String NS = "http://hello/";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
......@@ -18,5 +25,70 @@ public class HelloServlet extends HttpServlet {
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("Hello!");
out.println("Przyślij SOAP-a za pomocą POST");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
MimeHeaders headers = new MimeHeaders();
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
headers.setHeader(headerName, headerValue);
}
String name = null;
int repeat = 1;
MessageFactory mf = MessageFactory.newInstance();
SOAPMessage req = mf.createMessage(headers, request.getInputStream());
SOAPBody reqBody = req.getSOAPBody();
NodeList found = reqBody.getElementsByTagNameNS(NS, "hello");
if (found.getLength() > 0) {
Element sayHello = (Element) found.item(0);
found = sayHello.getElementsByTagNameNS(XMLConstants.NULL_NS_URI, "imie");
if (found.getLength() > 0) {
name = found.item(0).getTextContent();
}
found = sayHello.getElementsByTagNameNS(XMLConstants.NULL_NS_URI, "powtorz");
if (found.getLength() > 0) {
try {
repeat = Integer.parseInt(found.item(0).getTextContent());
} catch (NumberFormatException nfe) {
repeat = 0;
}
}
}
SOAPMessage resp = mf.createMessage();
SOAPBody respBody = resp.getSOAPBody();
if (name != null) {
StringBuilder txt = new StringBuilder();
for (int i = 0; i < repeat; ++i) {
txt.append("Hello ");
txt.append(name);
txt.append('\n');
}
SOAPElement sayHelloResponse = respBody.addBodyElement(new QName(NS, "helloResponse", "pre"));
SOAPElement message = sayHelloResponse.addChildElement(new QName(XMLConstants.NULL_NS_URI, "powitanie"));
message.setTextContent(txt.toString());
} else {
Name qname = SOAPFactory.newInstance().createName("Client", null, SOAPConstants.URI_NS_SOAP_ENVELOPE);
SOAPFault fault = respBody.addFault();
fault.setFaultCode(qname);
fault.setFaultString("Bad request");
}
response.setContentType("text/xml");
resp.writeTo(response.getOutputStream());
response.getOutputStream().close();
} catch (Exception e) {
throw new ServletException(e);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment