[jbossws-commits] JBossWS SVN: r3567 - branches/jbossws-2.0/jbossws-core/src/main/java/org/jboss/ws/extensions/addressing/soap.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Wed Jun 13 10:29:21 EDT 2007


Author: heiko.braun at jboss.com
Date: 2007-06-13 10:29:21 -0400 (Wed, 13 Jun 2007)
New Revision: 3567

Modified:
   branches/jbossws-2.0/jbossws-core/src/main/java/org/jboss/ws/extensions/addressing/soap/SOAPAddressingPropertiesImpl.java
Log:
Implement setMu(boolean)

Modified: branches/jbossws-2.0/jbossws-core/src/main/java/org/jboss/ws/extensions/addressing/soap/SOAPAddressingPropertiesImpl.java
===================================================================
--- branches/jbossws-2.0/jbossws-core/src/main/java/org/jboss/ws/extensions/addressing/soap/SOAPAddressingPropertiesImpl.java	2007-06-13 14:28:26 UTC (rev 3566)
+++ branches/jbossws-2.0/jbossws-core/src/main/java/org/jboss/ws/extensions/addressing/soap/SOAPAddressingPropertiesImpl.java	2007-06-13 14:29:21 UTC (rev 3567)
@@ -37,10 +37,7 @@
 
 import javax.xml.namespace.QName;
 import javax.xml.soap.*;
-import javax.xml.ws.addressing.AddressingConstants;
-import javax.xml.ws.addressing.AddressingException;
-import javax.xml.ws.addressing.ReferenceParameters;
-import javax.xml.ws.addressing.Relationship;
+import javax.xml.ws.addressing.*;
 import javax.xml.ws.addressing.soap.SOAPAddressingBuilder;
 import javax.xml.ws.addressing.soap.SOAPAddressingProperties;
 import java.lang.reflect.Array;
@@ -65,6 +62,8 @@
 
    private NamespaceRegistry nsRegistry = new NamespaceRegistry();
 
+	private boolean mustunderstand;
+
 	private String getRequiredHeaderContent(SOAPHeader soapHeader, QName qname)
 	{
 		Element element = DOMUtils.getFirstChildElement(soapHeader, qname);
@@ -221,21 +220,20 @@
       try
       {
          SOAPFactoryImpl factory = (SOAPFactoryImpl)SOAPFactory.newInstance();
-
          SOAPHeader soapHeader = message.getSOAPHeader();
 
+			// Assert on REQUIRED elements wsa:Action and wsa:To
          if (getAction() == null)
-            throw new AddressingException("Required addressing property wsa:Action");
+				throw new AddressingException("Required addressing header missing: " + ADDR.getActionQName());
+			if (getTo() == null)
+				throw new AddressingException("Required addressing header missing: " + ADDR.getToQName());
 
          // Add the xmlns:wsa declaration 
          soapHeader.addNamespaceDeclaration(ADDR.getNamespacePrefix(), ADDR.getNamespaceURI());
 
-         // Write wsa:To
-         if (getTo() != null)
-         {
-            SOAPElement wsaTo = soapHeader.addChildElement(new NameImpl(ADDR.getToQName()));
-            wsaTo.addTextNode(getTo().getURI().toString());
-         }
+			// Write REQUIRED wsa:Action and wsa:To
+			appendRequiredHeader(soapHeader, ADDR.getActionQName(), getAction());
+			appendRequiredHeader(soapHeader, ADDR.getToQName(), getTo());
 
          // Write wsa:From
          if (getFrom() != null)
@@ -266,13 +264,13 @@
             soapElement.removeNamespaceDeclaration(ADDR.getNamespacePrefix());
             soapHeader.addChildElement(soapElement);
          }
-
-         // Write wsa:Action
-         SOAPElement wsaAction = soapHeader.addChildElement(new NameImpl(ADDR.getActionQName()));
-         wsaAction.addTextNode(getAction().getURI().toString());
-
+      
          // Write wsa:MessageID
-         if (getMessageID() != null)
+			if( (getReplyTo()!=null || getFaultTo()!=null) && null==getMessageID())
+			{
+				throw new AddressingException("Required addressing header missing:" + ADDR.getMessageIDQName());
+			}
+			else if (getMessageID() != null)
          {
             SOAPElement wsaMessageId = soapHeader.addChildElement(new NameImpl(ADDR.getMessageIDQName()));
             wsaMessageId.addTextNode(getMessageID().getURI().toString());
@@ -309,9 +307,23 @@
       }
    }
 
+	private void appendRequiredHeader(SOAPHeader soapHeader, QName name, AttributedURI value) throws SOAPException
+	{
+		SOAPElement element = soapHeader.addChildElement(new NameImpl(name));
+		element.addTextNode(value.getURI().toString());
+
+		if(mustunderstand)
+		{
+			// add soap:mustUnderstand=1
+			String envNS = soapHeader.getParentElement().getNamespaceURI();
+			element.addNamespaceDeclaration("soap", envNS);
+			element.addAttribute(new QName(envNS, "mustUnderstand", "soap"), "1");
+		}
+	}
+
    public void setMu(boolean mu)
    {
-      throw new NotImplementedException();
+		this.mustunderstand = mu;
    }
 
    private void appendAttributes(SOAPElement soapElement, Map<QName, String> attributes)




More information about the jbossws-commits mailing list