You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by pr...@apache.org on 2008/04/02 18:34:55 UTC

svn commit: r643963 - in /webservices/axis2/trunk/java/modules: addressing/src/org/apache/axis2/addressing/i18n/ addressing/src/org/apache/axis2/handlers/addressing/ kernel/src/org/apache/axis2/util/

Author: pradine
Date: Wed Apr  2 09:34:53 2008
New Revision: 643963

URL: http://svn.apache.org/viewvc?rev=643963&view=rev
Log:
Fix for AXIS2-3640.

Modified:
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/i18n/resource.properties
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/XMLUtils.java

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/i18n/resource.properties
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/i18n/resource.properties?rev=643963&r1=643962&r2=643963&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/i18n/resource.properties (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/addressing/i18n/resource.properties Wed Apr  2 09:34:53 2008
@@ -90,6 +90,7 @@
 #     will serve as a base for other translators.
 
 outboundNoAction=Unable to determine wsa:Action for outbound message
+referenceParameterError=An error occurred while attempting to add a reference parameter as a SOAP header.
 
 specificInvalidAddressingHeader=The server failed to process the WS-Addressing header: {0} [Reason]: A header representing a Message Addressing Property is not valid and the message cannot be processed
 invalidAddressingHeader=The server failed to process one of the WS-Addressing headers. [Reason]: A header representing a Message Addressing Property is not valid and the message cannot be processed

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java?rev=643963&r1=643962&r2=643963&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java Wed Apr  2 09:34:53 2008
@@ -24,8 +24,6 @@
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.util.AttributeHelper;
 import org.apache.axiom.om.util.ElementHelper;
-import org.apache.axiom.soap.SOAP11Constants;
-import org.apache.axiom.soap.SOAP12Constants;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.SOAPFault;
@@ -48,6 +46,7 @@
 import org.apache.axis2.util.JavaUtils;
 import org.apache.axis2.util.LoggingControl;
 import org.apache.axis2.util.Utils;
+import org.apache.axis2.util.XMLUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -402,10 +401,15 @@
             }
         }
 
-        private void processToEPR() {
+        private void processToEPR() throws AxisFault {
             EndpointReference epr = messageContextOptions.getTo();
             if (epr != null && !isAddressingHeaderAlreadyAvailable(WSA_TO, false)) {
-                processToEPRReferenceInformation(epr.getAllReferenceParameters());
+                try {
+                    processToEPRReferenceInformation(epr.getAllReferenceParameters());
+                }
+                catch (Exception e) {
+                    throw new AxisFault(AddressingMessages.getMessage("referenceParameterError"), e);
+                }
                 String address = epr.getAddress();
                 if (address != null && address.length()!=0) {
                     if (!includeOptionalHeaders && isFinalAddressingNamespace &&
@@ -474,7 +478,7 @@
                                                                      new QName(addressingNamespace,
                                                                                headerName, prefix),
                                                                      addressingNamespace);
-            addRoleToHeader(soapHeaderBlock);
+            addRoleToHeader((SOAPHeaderBlock) soapHeaderBlock);
             header.addChild(soapHeaderBlock);
         }
 
@@ -485,7 +489,7 @@
          * @param parent               is the element to which the referenceparameters should be
          *                             attached
          */
-        private void processToEPRReferenceInformation(Map referenceInformation) {
+        private void processToEPRReferenceInformation(Map referenceInformation) throws Exception {
             if (referenceInformation != null) {
                 if (LoggingControl.debugLoggingAllowed && log.isTraceEnabled()) {
                     log.trace("processToEPRReferenceInformation: " + referenceInformation);
@@ -493,7 +497,7 @@
                 Iterator iterator = referenceInformation.values().iterator();
                 while (iterator.hasNext()) {
                     OMElement omElement = (OMElement)iterator.next();
-                    OMElement newElement = ElementHelper.importOMElement(omElement, header.getOMFactory());
+                    SOAPHeaderBlock newElement = XMLUtils.toSOAPHeaderBlock(omElement, factory);
                     if (isFinalAddressingNamespace) {
                         newElement.addAttribute(Final.WSA_IS_REFERENCE_PARAMETER_ATTRIBUTE,
                                                Final.WSA_TYPE_ATTRIBUTE_VALUE,
@@ -516,7 +520,7 @@
             			Iterator iterator = referenceparameters.iterator();
             			while (iterator.hasNext()) {
             				OMElement omElement = (OMElement)iterator.next();
-            				OMElement newElement = ElementHelper.importOMElement(omElement, header.getOMFactory());
+                            SOAPHeaderBlock newElement = XMLUtils.toSOAPHeaderBlock(omElement, factory);
             				if (isFinalAddressingNamespace) {
             					newElement.addAttribute(Final.WSA_IS_REFERENCE_PARAMETER_ATTRIBUTE,
             							Final.WSA_TYPE_ATTRIBUTE_VALUE,
@@ -607,21 +611,11 @@
             }
         }
         
-        private void addRoleToHeader(OMElement header){
+        private void addRoleToHeader(SOAPHeaderBlock header){
         	if(addressingRole == null || addressingRole.length()==0){
         		return;
         	}
-        	if(header instanceof SOAPHeaderBlock){
-        		((SOAPHeaderBlock)header).setRole(addressingRole);
-        	}else{
-        		if(messageContext.isSOAP11()){
-        			OMAttribute roleAttr = factory.createOMAttribute(SOAP11Constants.ATTR_ACTOR, envelope.getNamespace(), addressingRole);
-        			header.addAttribute(roleAttr);
-        		}else{
-        			OMAttribute roleAttr = factory.createOMAttribute(SOAP12Constants.SOAP_ROLE, envelope.getNamespace(), addressingRole);
-        			header.addAttribute(roleAttr);
-        		}
-        	}
+        	header.setRole(addressingRole);
         }
     }
 }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/XMLUtils.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/XMLUtils.java?rev=643963&r1=643962&r2=643963&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/XMLUtils.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/util/XMLUtils.java Wed Apr  2 09:34:53 2008
@@ -23,10 +23,14 @@
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.ds.ByteArrayDataSource;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import org.apache.axiom.om.util.Base64;
 import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.w3c.dom.Attr;
 import org.w3c.dom.CharacterData;
 import org.w3c.dom.Document;
@@ -547,6 +551,18 @@
             builder.close();
         }
         return omElement;
+    }
+    
+    public static SOAPHeaderBlock toSOAPHeaderBlock(OMElement omElement, SOAPFactory factory) throws Exception {
+        QName name = omElement.getQName();
+        String localName = name.getLocalPart();
+        OMNamespace namespace = factory.createOMNamespace(name.getNamespaceURI(), name.getPrefix());
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        omElement.serialize(baos);
+        ByteArrayDataSource bads = new ByteArrayDataSource(baos.toByteArray(), "utf-8");
+        SOAPHeaderBlock block = factory.createSOAPHeaderBlock(localName, namespace, bads);
+        
+        return block;
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org