From cf8604e4431c5fc4070f877be8320540aa9f8b7c Mon Sep 17 00:00:00 2001
From: Chris Ridd <chris.ridd@forgerock.com>
Date: Tue, 01 Jul 2014 13:39:36 +0000
Subject: [PATCH] Fix OPENDJ-1187: DSML Gateway SOAP 1.2 Support

---
 opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java |   25 ++++++++++++++++++++-----
 1 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
index 4db34f1..9e1f795 100644
--- a/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
+++ b/opendj-sdk/opends/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.dsml.protocol;
 
@@ -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();
@@ -376,7 +381,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();
@@ -770,7 +785,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