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