src/share/jaxws_classes/com/sun/xml/internal/ws/api/message/MessageContextFactory.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -25,31 +25,39 @@
 
 package com.sun.xml.internal.ws.api.message;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
+import javax.xml.soap.MimeHeader;
+import javax.xml.soap.MimeHeaders;
 import javax.xml.soap.SOAPMessage;
 import javax.xml.transform.Source;
 import javax.xml.ws.WebServiceFeature;
+import javax.xml.ws.soap.MTOMFeature;
 
-import com.sun.xml.internal.org.jvnet.ws.EnvelopeStyle;
-import com.sun.xml.internal.org.jvnet.ws.EnvelopeStyleFeature;
-import com.sun.xml.internal.org.jvnet.ws.message.MessageContext;
-
+import com.oracle.webservices.internal.api.EnvelopeStyle;
+import com.oracle.webservices.internal.api.EnvelopeStyleFeature;
+import com.oracle.webservices.internal.api.message.MessageContext;
 import com.sun.xml.internal.ws.api.SOAPVersion;
 import com.sun.xml.internal.ws.api.WSFeatureList;
 import com.sun.xml.internal.ws.api.pipe.Codec;
 import com.sun.xml.internal.ws.api.pipe.Codecs;
+import static com.sun.xml.internal.ws.transport.http.HttpAdapter.fixQuotesAroundSoapAction;
 
 /**
- * The MessageContextFactory implements com.sun.xml.internal.org.jvnet.ws.message.MessageContextFactory as
+ * The MessageContextFactory implements com.oracle.webservices.internal.api.message.MessageContextFactory as
  * a factory of Packet and public facade of Codec(s).
  *
  * @author shih-chang.chen@oracle.com
  */
-public class MessageContextFactory extends com.sun.xml.internal.org.jvnet.ws.message.MessageContextFactory {
+public class MessageContextFactory extends com.oracle.webservices.internal.api.message.MessageContextFactory {
 
     private WSFeatureList features;
     private Codec soapCodec;
     private Codec xmlCodec;
     private EnvelopeStyleFeature envelopeStyle;

@@ -74,48 +82,107 @@
                 singleSoapStyle = s;
             }
         }
     }
 
-    protected com.sun.xml.internal.org.jvnet.ws.message.MessageContextFactory newFactory(WebServiceFeature... f) {
+    protected com.oracle.webservices.internal.api.message.MessageContextFactory newFactory(WebServiceFeature... f) {
         return new com.sun.xml.internal.ws.api.message.MessageContextFactory(f);
     }
 
-    public MessageContext createContext(SOAPMessage soap) {
+
+    public com.oracle.webservices.internal.api.message.MessageContext createContext() {
+        return packet(null);
+    }
+
+    public com.oracle.webservices.internal.api.message.MessageContext createContext(SOAPMessage soap) {
+        throwIfIllegalMessageArgument(soap);
         return packet(Messages.create(soap));
     }
 
-    public MessageContext createContext(Source m, EnvelopeStyle.Style envelopeStyle) {
+    public MessageContext createContext(Source m, com.oracle.webservices.internal.api.EnvelopeStyle.Style envelopeStyle) {
+        throwIfIllegalMessageArgument(m);
         return packet(Messages.create(m, SOAPVersion.from(envelopeStyle)));
     }
 
-    public MessageContext createContext(Source m) {
+    public com.oracle.webservices.internal.api.message.MessageContext createContext(Source m) {
+        throwIfIllegalMessageArgument(m);
         return packet(Messages.create(m, SOAPVersion.from(singleSoapStyle)));
     }
 
-    public MessageContext createContext(InputStream in, String contentType) throws IOException {
+    public com.oracle.webservices.internal.api.message.MessageContext createContext(InputStream in, String contentType) throws IOException {
+        throwIfIllegalMessageArgument(in);
         //TODO when do we use xmlCodec?
         Packet p = packet(null);
         soapCodec.decode(in, contentType, p);
         return p;
     }
 
+    /**
+     * @deprecated http://java.net/jira/browse/JAX_WS-1077
+     */
+    @Deprecated
+    public com.oracle.webservices.internal.api.message.MessageContext createContext(InputStream in, MimeHeaders headers) throws IOException {
+        String contentType = getHeader(headers, "Content-Type");
+        Packet packet = (Packet) createContext(in, contentType);
+        packet.acceptableMimeTypes = getHeader(headers, "Accept");
+        packet.soapAction = fixQuotesAroundSoapAction(getHeader(headers, "SOAPAction"));
+//      packet.put(Packet.INBOUND_TRANSPORT_HEADERS, toMap(headers));
+        return packet;
+    }
+
+    static String getHeader(MimeHeaders headers, String name) {
+        String[] values = headers.getHeader(name);
+        return (values != null && values.length > 0) ? values[0] : null;
+    }
+
+    static Map<String, List<String>> toMap(MimeHeaders headers) {
+        HashMap<String, List<String>> map = new HashMap<String, List<String>>();
+        for (Iterator<MimeHeader> i = headers.getAllHeaders(); i.hasNext();) {
+            MimeHeader mh = i.next();
+            List<String> values = map.get(mh.getName());
+            if (values == null) {
+                values = new ArrayList<String>();
+                map.put(mh.getName(), values);
+            }
+            values.add(mh.getValue());
+        }
+        return map;
+    }
+
+    public MessageContext createContext(Message m) {
+        throwIfIllegalMessageArgument(m);
+        return packet(m);
+    }
+
     private Packet packet(Message m) {
         final Packet p = new Packet();
         //TODO when do we use xmlCodec?
         p.codec = soapCodec;
         if (m != null) p.setMessage(m);
+        MTOMFeature mf = features.get(MTOMFeature.class);
+        if (mf != null) {
+            p.setMtomFeature(mf);
+        }
         return p;
     }
 
+    private void throwIfIllegalMessageArgument(Object message)
+        throws IllegalArgumentException
+    {
+        if (message == null) {
+            throw new IllegalArgumentException("null messages are not allowed.  Consider using MessageContextFactory.createContext()");
+        }
+    }
 
-
-    public MessageContext doCreate() {
+    @Deprecated
+    public com.oracle.webservices.internal.api.message.MessageContext doCreate() {
         return packet(null);
     }
-    public MessageContext doCreate(SOAPMessage m) {
+    @Deprecated
+    public com.oracle.webservices.internal.api.message.MessageContext doCreate(SOAPMessage m) {
         return createContext(m);
     }
-    public MessageContext doCreate(Source x, SOAPVersion soapVersion) {
+    @Deprecated
+    public com.oracle.webservices.internal.api.message.MessageContext doCreate(Source x, SOAPVersion soapVersion) {
         return packet(Messages.create(x, soapVersion));
     }
 }