You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2011/03/11 05:24:42 UTC
svn commit: r1080440 - in /cxf/trunk/rt:
bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/
frontend/jaxws/src/main/java/org/apache/cxf/jaxws/
frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/
frontend/jaxws/src/main/java/org/a...
Author: dkulp
Date: Fri Mar 11 04:24:41 2011
New Revision: 1080440
URL: http://svn.apache.org/viewvc?rev=1080440&view=rev
Log:
[CXF-3363] Make creation of various SAAJ factories go through a common
class that can handle various J2EE issues and SAAJ version issues and
such.
Added:
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJFactoryResolver.java (with props)
Modified:
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/SOAPBindingImpl.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java
Added: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJFactoryResolver.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJFactoryResolver.java?rev=1080440&view=auto
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJFactoryResolver.java (added)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJFactoryResolver.java Fri Mar 11 04:24:41 2011
@@ -0,0 +1,102 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.binding.soap.saaj;
+
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPConstants;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPFactory;
+
+import org.apache.cxf.binding.soap.Soap11;
+import org.apache.cxf.binding.soap.Soap12;
+import org.apache.cxf.binding.soap.SoapVersion;
+
+/**
+ *
+ */
+public final class SAAJFactoryResolver {
+
+ public static final String MESSAGE_FACTORY_KEY
+ = "org.apache.cxf.binding.soap.messageFactoryClassName";
+ public static final String SOAP_FACTORY_KEY
+ = "org.apache.cxf.binding.soap.soapFactoryClassName";
+
+ private SAAJFactoryResolver() {
+ //utility class
+ }
+
+ public static MessageFactory createMessageFactory(SoapVersion version) throws SOAPException {
+ MessageFactory messageFactory;
+ String messageFactoryClassName = System.getProperty(MESSAGE_FACTORY_KEY);
+ if (messageFactoryClassName != null) {
+ messageFactory = newInstanceCxfMessageFactory(messageFactoryClassName,
+ MessageFactory.class);
+ } else if (version instanceof Soap11) {
+ try {
+ messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
+ } catch (Throwable t) {
+ messageFactory = MessageFactory.newInstance();
+ }
+ } else if (version instanceof Soap12) {
+ messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
+ } else {
+ messageFactory = MessageFactory.newInstance();
+ }
+ return messageFactory;
+ }
+
+ public static SOAPFactory createSOAPFactory(SoapVersion version) throws SOAPException {
+ SOAPFactory soapFactory;
+ String soapFactoryClassName = System.getProperty(SOAP_FACTORY_KEY);
+ if (soapFactoryClassName != null) {
+ soapFactory = newInstanceCxfMessageFactory(soapFactoryClassName,
+ SOAPFactory.class);
+ } else if (version instanceof Soap11) {
+ try {
+ soapFactory = SOAPFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
+ } catch (Throwable t) {
+ soapFactory = SOAPFactory.newInstance();
+ }
+ } else if (version instanceof Soap12) {
+ soapFactory = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
+ } else {
+ soapFactory = SOAPFactory.newInstance();
+ }
+ return soapFactory;
+ }
+
+ private static <T> T newInstanceCxfMessageFactory(String factoryName, Class<T> cls)
+ throws SOAPException {
+ try {
+ Class<?> klass = Class.forName(factoryName);
+ return cls.cast(klass.newInstance());
+ } catch (ClassNotFoundException cnfe) {
+ throw new SOAPException("Provider " + factoryName + " could not be instantiated: "
+ + cnfe, cnfe);
+ } catch (InstantiationException ie) {
+ throw new SOAPException("Provider " + factoryName + " could not be instantiated: "
+ + ie, ie);
+ } catch (IllegalAccessException iae) {
+ throw new SOAPException("Provider " + factoryName + " could not be instantiated: "
+ + iae, iae);
+ }
+ }
+
+}
Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJFactoryResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJFactoryResolver.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java?rev=1080440&r1=1080439&r2=1080440&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java Fri Mar 11 04:24:41 2011
@@ -31,7 +31,6 @@ import javax.xml.namespace.QName;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.Detail;
import javax.xml.soap.MessageFactory;
-import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPHeader;
@@ -49,6 +48,7 @@ import org.w3c.dom.Node;
import org.apache.cxf.Bus;
import org.apache.cxf.attachment.AttachmentDataSource;
import org.apache.cxf.binding.soap.Soap11;
+import org.apache.cxf.binding.soap.Soap12;
import org.apache.cxf.binding.soap.SoapFault;
import org.apache.cxf.binding.soap.SoapHeader;
import org.apache.cxf.binding.soap.SoapMessage;
@@ -145,14 +145,17 @@ public class SAAJInInterceptor extends A
public synchronized MessageFactory getFactory(SoapMessage message) throws SOAPException {
if (message.getVersion() instanceof Soap11) {
if (factory11 == null) {
- factory11 = MessageFactory.newInstance();
+ factory11 = SAAJFactoryResolver.createMessageFactory(message.getVersion());
}
return factory11;
}
- if (factory12 == null) {
- factory12 = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
+ if (message.getVersion() instanceof Soap12) {
+ if (factory12 == null) {
+ factory12 = SAAJFactoryResolver.createMessageFactory(message.getVersion());
+ }
+ return factory12;
}
- return factory12;
+ return SAAJFactoryResolver.createMessageFactory(null);
}
}
Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java?rev=1080440&r1=1080439&r2=1080440&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJOutInterceptor.java Fri Mar 11 04:24:41 2011
@@ -29,7 +29,6 @@ import java.util.ResourceBundle;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeader;
-import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
@@ -41,6 +40,7 @@ import org.w3c.dom.Node;
import org.apache.cxf.attachment.AttachmentImpl;
import org.apache.cxf.binding.soap.Soap11;
+import org.apache.cxf.binding.soap.Soap12;
import org.apache.cxf.binding.soap.SoapFault;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.SoapVersion;
@@ -82,14 +82,17 @@ public class SAAJOutInterceptor extends
public synchronized MessageFactory getFactory(SoapMessage message) throws SOAPException {
if (message.getVersion() instanceof Soap11) {
if (factory11 == null) {
- factory11 = MessageFactory.newInstance();
+ factory11 = SAAJFactoryResolver.createMessageFactory(message.getVersion());
}
return factory11;
}
- if (factory12 == null) {
- factory12 = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
+ if (message.getVersion() instanceof Soap12) {
+ if (factory12 == null) {
+ factory12 = SAAJFactoryResolver.createMessageFactory(message.getVersion());
+ }
+ return factory12;
}
- return factory12;
+ return SAAJFactoryResolver.createMessageFactory(null);
}
public void handleMessage(SoapMessage message) throws Fault {
SOAPMessage saaj = message.getContent(SOAPMessage.class);
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java?rev=1080440&r1=1080439&r2=1080440&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java Fri Mar 11 04:24:41 2011
@@ -31,7 +31,6 @@ import java.util.logging.Logger;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
-import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPFault;
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.Binding;
@@ -48,6 +47,7 @@ import javax.xml.ws.soap.SOAPFaultExcept
import org.w3c.dom.Node;
import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.saaj.SAAJFactoryResolver;
import org.apache.cxf.common.i18n.Message;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.endpoint.Client;
@@ -199,7 +199,7 @@ public class JaxWsClientProxy extends or
.equals(((SoapFault)ex).getFaultCode().getNamespaceURI())) {
//change to 1.1
try {
- soapFault = SOAPFactory.newInstance().createFault();
+ soapFault = SAAJFactoryResolver.createSOAPFactory(null).createFault();
} catch (Throwable t) {
//ignore
}
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/SOAPBindingImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/SOAPBindingImpl.java?rev=1080440&r1=1080439&r2=1080440&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/SOAPBindingImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/binding/soap/SOAPBindingImpl.java Fri Mar 11 04:24:41 2011
@@ -24,7 +24,6 @@ import java.util.ResourceBundle;
import java.util.Set;
import java.util.logging.Logger;
import javax.xml.soap.MessageFactory;
-import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFactory;
import javax.xml.ws.WebServiceException;
@@ -34,6 +33,7 @@ import org.apache.cxf.binding.soap.Soap1
import org.apache.cxf.binding.soap.Soap12;
import org.apache.cxf.binding.soap.SoapBindingConstants;
import org.apache.cxf.binding.soap.model.SoapBindingInfo;
+import org.apache.cxf.binding.soap.saaj.SAAJFactoryResolver;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.jaxws.binding.AbstractBindingImpl;
import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
@@ -95,11 +95,7 @@ public class SOAPBindingImpl extends Abs
if (this.soapBinding instanceof SoapBindingInfo) {
SoapBindingInfo bindingInfo = (SoapBindingInfo) this.soapBinding;
try {
- if (bindingInfo.getSoapVersion() instanceof Soap11) {
- return MessageFactory.newInstance();
- } else if (bindingInfo.getSoapVersion() instanceof Soap12) {
- return MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
- }
+ return SAAJFactoryResolver.createMessageFactory(bindingInfo.getSoapVersion());
} catch (SOAPException e) {
throw new WebServiceException(BUNDLE.getString("SAAJ_FACTORY_ERR"), e);
}
@@ -111,11 +107,7 @@ public class SOAPBindingImpl extends Abs
if (this.soapBinding instanceof SoapBindingInfo) {
SoapBindingInfo bindingInfo = (SoapBindingInfo) this.soapBinding;
try {
- if (bindingInfo.getSoapVersion() instanceof Soap11) {
- return SOAPFactory.newInstance();
- } else if (bindingInfo.getSoapVersion() instanceof Soap12) {
- return SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
- }
+ return SAAJFactoryResolver.createSOAPFactory(bindingInfo.getSoapVersion());
} catch (SOAPException e) {
throw new WebServiceException(BUNDLE.getString("SAAJ_FACTORY_ERR"), e);
}
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java?rev=1080440&r1=1080439&r2=1080440&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/HandlerChainInvoker.java Fri Mar 11 04:24:41 2011
@@ -26,9 +26,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.namespace.QName;
-import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
-import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPMessage;
@@ -45,6 +43,8 @@ import org.w3c.dom.Node;
import org.apache.cxf.binding.soap.SoapFault;
import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.SoapVersion;
+import org.apache.cxf.binding.soap.saaj.SAAJFactoryResolver;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.jaxws.context.WebServiceContextImpl;
@@ -434,11 +434,11 @@ public class HandlerChainInvoker {
try {
SOAPMessage soapMessage = null;
- if (!(msg instanceof SoapMessage) || ((SoapMessage)msg).getVersion().getVersion() <= 1.11d) {
- soapMessage = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createMessage();
- } else {
- soapMessage = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage();
+ SoapVersion version = null;
+ if (msg instanceof SoapMessage) {
+ version = ((SoapMessage)msg).getVersion();
}
+ soapMessage = SAAJFactoryResolver.createMessageFactory(version).createMessage();
msg.setContent(SOAPMessage.class, soapMessage);
SOAPBody body = soapMessage.getSOAPBody();
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java?rev=1080440&r1=1080439&r2=1080440&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java Fri Mar 11 04:24:41 2011
@@ -28,7 +28,6 @@ import javax.activation.DataSource;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.stream.XMLStreamException;
@@ -45,6 +44,7 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.saaj.SAAJFactoryResolver;
import org.apache.cxf.common.WSDLConstants;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.interceptor.Fault;
@@ -250,9 +250,9 @@ public class LogicalMessageImpl implemen
private SOAPMessage initSOAPMessage(InputStream is) throws SOAPException, IOException {
SOAPMessage msg = null;
if (is != null) {
- msg = MessageFactory.newInstance().createMessage(null, is);
+ msg = SAAJFactoryResolver.createMessageFactory(null).createMessage(null, is);
} else {
- msg = MessageFactory.newInstance().createMessage();
+ msg = SAAJFactoryResolver.createMessageFactory(null).createMessage();
}
msg.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
msg.getSOAPPart().getEnvelope().addNamespaceDeclaration(WSDLConstants.NP_SCHEMA_XSD,