--- old/src/share/jaxws_classes/com/sun/xml/internal/ws/api/message/saaj/SAAJFactory.java 2013-04-04 15:28:50.776614379 +0200
+++ new/src/share/jaxws_classes/com/sun/xml/internal/ws/api/message/saaj/SAAJFactory.java 2013-04-04 15:28:50.720614379 +0200
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, 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
@@ -33,6 +33,7 @@
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPMessage;
+import javax.xml.stream.XMLStreamException;
import org.xml.sax.SAXException;
@@ -41,6 +42,7 @@
import com.sun.xml.internal.ws.api.message.Attachment;
import com.sun.xml.internal.ws.api.message.AttachmentEx;
import com.sun.xml.internal.ws.api.message.Message;
+import com.sun.xml.internal.ws.api.message.Packet;
import com.sun.xml.internal.ws.message.saaj.SAAJMessage;
import com.sun.xml.internal.ws.util.ServiceFinder;
import com.sun.xml.internal.ws.util.xml.XmlUtil;
@@ -76,14 +78,14 @@
* specified implementation of MessageFactory
.
* @see SAAJMetaFactory
*/
- public static MessageFactory getMessageFactory(String saajFactoryString) throws SOAPException {
+ public static MessageFactory getMessageFactory(String protocol) throws SOAPException {
for (SAAJFactory s : ServiceFinder.find(SAAJFactory.class)) {
- MessageFactory mf = s.createMessageFactory(saajFactoryString);
+ MessageFactory mf = s.createMessageFactory(protocol);
if (mf != null)
return mf;
}
- return instance.createMessageFactory(saajFactoryString);
+ return instance.createMessageFactory(protocol);
}
/**
@@ -104,14 +106,14 @@
* specified SOAPFactory
* @see SAAJMetaFactory
*/
- public static SOAPFactory getSOAPFactory(String saajFactoryString) throws SOAPException {
+ public static SOAPFactory getSOAPFactory(String protocol) throws SOAPException {
for (SAAJFactory s : ServiceFinder.find(SAAJFactory.class)) {
- SOAPFactory sf = s.createSOAPFactory(saajFactoryString);
+ SOAPFactory sf = s.createSOAPFactory(protocol);
if (sf != null)
return sf;
}
- return instance.createSOAPFactory(saajFactoryString);
+ return instance.createSOAPFactory(protocol);
}
/**
@@ -146,6 +148,50 @@
return instance.readAsSOAPMessage(soapVersion, message);
}
+ /**
+ * Reads Message as SOAPMessage. After this call message is consumed.
+ * @param soapVersion SOAP version
+ * @param message Message
+ * @param packet The packet that owns the Message
+ * @return Created SOAPMessage
+ * @throws SOAPException if SAAJ processing fails
+ */
+ public static SOAPMessage read(SOAPVersion soapVersion, Message message, Packet packet) throws SOAPException {
+ for (SAAJFactory s : ServiceFinder.find(SAAJFactory.class)) {
+ SOAPMessage msg = s.readAsSOAPMessage(soapVersion, message, packet);
+ if (msg != null)
+ return msg;
+ }
+
+ return instance.readAsSOAPMessage(soapVersion, message, packet);
+ }
+
+ /**
+ * Reads the message within the Packet to a SAAJMessage. After this call message is consumed.
+ * @param packet Packet
+ * @return Created SAAJPMessage
+ * @throws SOAPException if SAAJ processing fails
+ */
+ public static SAAJMessage read(Packet packet) throws SOAPException {
+ for (SAAJFactory s : ServiceFinder.find(SAAJFactory.class)) {
+ SAAJMessage msg = s.readAsSAAJ(packet);
+ if (msg != null) return msg;
+ }
+ return instance.readAsSAAJ(packet);
+ }
+
+ /**
+ * Reads the message within the Packet to a SAAJMessage. After this call message is consumed.
+ * @param packet Packet
+ * @return Created SAAJPMessage
+ * @throws SOAPException if SAAJ processing fails
+ */
+ public SAAJMessage readAsSAAJ(Packet packet) throws SOAPException {
+ SOAPVersion v = packet.getMessage().getSOAPVersion();
+ SOAPMessage msg = readAsSOAPMessage(v, packet.getMessage());
+ return new SAAJMessage(msg);
+ }
+
/**
* Creates a new MessageFactory
object that is an instance
* of the specified implementation. May be a dynamic message factory,
@@ -169,8 +215,8 @@
* specified implementation of MessageFactory
.
* @see SAAJMetaFactory
*/
- public MessageFactory createMessageFactory(String saajFactoryString) throws SOAPException {
- return MessageFactory.newInstance(saajFactoryString);
+ public MessageFactory createMessageFactory(String protocol) throws SOAPException {
+ return MessageFactory.newInstance(protocol);
}
/**
@@ -191,8 +237,8 @@
* specified SOAPFactory
* @see SAAJMetaFactory
*/
- public SOAPFactory createSOAPFactory(String saajFactoryString) throws SOAPException {
- return SOAPFactory.newInstance(saajFactoryString);
+ public SOAPFactory createSOAPFactory(String protocol) throws SOAPException {
+ return SOAPFactory.newInstance(protocol);
}
/**
@@ -211,16 +257,36 @@
* @return Created SOAPMessage
* @throws SOAPException if SAAJ processing fails
*/
- public SOAPMessage readAsSOAPMessage(SOAPVersion soapVersion, Message message) throws SOAPException {
+ public SOAPMessage readAsSOAPMessage(final SOAPVersion soapVersion, final Message message) throws SOAPException {
SOAPMessage msg = soapVersion.getMessageFactory().createMessage();
+ SaajStaxWriter writer = new SaajStaxWriter(msg);
+ try {
+ message.writeTo(writer);
+ } catch (XMLStreamException e) {
+ throw (e.getCause() instanceof SOAPException) ? (SOAPException) e.getCause() : new SOAPException(e);
+ }
+ msg = writer.getSOAPMessage();
+ addAttachmentsToSOAPMessage(msg, message);
+ if (msg.saveRequired())
+ msg.saveChanges();
+ return msg;
+ }
+ public SOAPMessage readAsSOAPMessageSax2Dom(final SOAPVersion soapVersion, final Message message) throws SOAPException {
+ SOAPMessage msg = soapVersion.getMessageFactory().createMessage();
SAX2DOMEx s2d = new SAX2DOMEx(msg.getSOAPPart());
try {
message.writeTo(s2d, XmlUtil.DRACONIAN_ERROR_HANDLER);
} catch (SAXException e) {
throw new SOAPException(e);
}
+ addAttachmentsToSOAPMessage(msg, message);
+ if (msg.saveRequired())
+ msg.saveChanges();
+ return msg;
+ }
+ static protected void addAttachmentsToSOAPMessage(SOAPMessage msg, Message message) {
for(Attachment att : message.getAttachments()) {
AttachmentPart part = msg.createAttachmentPart();
part.setDataHandler(att.asDataHandler());
@@ -249,9 +315,19 @@
}
msg.addAttachmentPart(part);
}
+ }
- if (msg.saveRequired())
- msg.saveChanges();
- return msg;
+ /**
+ * Reads Message as SOAPMessage. After this call message is consumed.
+ * The implementation in this class simply calls readAsSOAPMessage(SOAPVersion, Message),
+ * and ignores the other parameters
+ * Subclasses can override and choose to base SOAPMessage creation on Packet properties if needed
+ * @param soapVersion SOAP version
+ * @param message Message
+ * @return Created SOAPMessage
+ * @throws SOAPException if SAAJ processing fails
+ */
+ public SOAPMessage readAsSOAPMessage(SOAPVersion soapVersion, Message message, Packet packet) throws SOAPException {
+ return readAsSOAPMessage(soapVersion, message);
}
}