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