From 93543c7bd2a48f77d52fae49c5500a2b67931ee8 Mon Sep 17 00:00:00 2001
From: Chris Ridd <chris.ridd@forgerock.com>
Date: Tue, 01 Jul 2014 13:58:08 +0000
Subject: [PATCH] Forward port fix OPENDJ-1187: DSML Gateway SOAP 1.2 Support
---
opendj-sdk/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java | 23 +++++++++++++++++++----
1 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/opendj-sdk/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java b/opendj-sdk/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
index 3336592..9eb3b56 100644
--- a/opendj-sdk/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
+++ b/opendj-sdk/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
@@ -63,6 +63,7 @@
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.*;
+import javax.xml.soap.SOAPConstants;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
@@ -131,9 +132,12 @@
private static JAXBContext jaxbContext;
private ObjectFactory objFactory;
- private MessageFactory messageFactory;
private DocumentBuilder db;
private static Schema schema;
+ private MessageFactory messageFactory;
+ private MessageFactory messageFactorySOAP_1_1;
+ private MessageFactory messageFactorySOAP_1_2;
+ private String contentType;
// this extends the default handler of SAX parser. It helps to retrieve the
// requestID value when the xml request is malformed and thus unparsable
@@ -225,7 +229,8 @@
}
objFactory = new ObjectFactory();
- messageFactory = MessageFactory.newInstance();
+ messageFactorySOAP_1_1 = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
+ messageFactorySOAP_1_2 = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
db = dbf.newDocumentBuilder();
@@ -375,7 +380,17 @@
while (en.hasMoreElements()) {
String headerName = (String) en.nextElement();
String headerVal = req.getHeader(headerName);
- if (headerName.equalsIgnoreCase("authorization")) {
+ if (headerName.equalsIgnoreCase("content-type")) {
+ if (headerVal.startsWith(SOAPConstants.SOAP_1_1_CONTENT_TYPE)) {
+ messageFactory = messageFactorySOAP_1_1;
+ contentType = SOAPConstants.SOAP_1_1_CONTENT_TYPE;
+ } else if (headerVal.startsWith(SOAPConstants.SOAP_1_2_CONTENT_TYPE)) {
+ messageFactory = messageFactorySOAP_1_2;
+ contentType = SOAPConstants.SOAP_1_2_CONTENT_TYPE;
+ } else {
+ throw new ServletException("Content-Type does not match SOAP 1.1 or SOAP 1.2");
+ }
+ } else if (headerName.equalsIgnoreCase("authorization")) {
if (headerVal.startsWith("Basic ")) {
authenticationInHeader = true;
String authorization = headerVal.substring(6).trim();
@@ -769,7 +784,7 @@
header.detachNode();
SOAPBody replyBody = reply.getSOAPBody();
- res.setHeader("Content-Type", "text/xml");
+ res.setHeader("Content-Type", contentType);
replyBody.addDocument(doc);
--
Gitblit v1.10.0