You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by ga...@apache.org on 2004/06/22 07:00:19 UTC
cvs commit: ws-fx/addressing/src/org/apache/axis/message/addressing/util AddressingUtils.java
gawor 2004/06/21 22:00:19
Modified: addressing/src/org/apache/axis/message/addressing
Action.java AddressingHeaders.java
AttributedURI.java EndpointReference.java
FaultTo.java From.java MessageID.java
Recipient.java RelatesTo.java ReplyTo.java To.java
Added: addressing/src/org/apache/axis/message/addressing/util
AddressingUtils.java
Log:
fixed removal of duplicate headers. It now works for all WSA headers, does proper namespace checking, and supports actors
Revision Changes Path
1.6 +3 -2 ws-fx/addressing/src/org/apache/axis/message/addressing/Action.java
Index: Action.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/Action.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Action.java 13 May 2004 12:52:20 -0000 1.5
+++ Action.java 22 Jun 2004 05:00:19 -0000 1.6
@@ -56,9 +56,10 @@
super(el);
}
- public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
+ public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI)
throws Exception {
- return toSOAPHeaderElement(env, Constants.ACTION);
+ return toSOAPHeaderElement(env, actorURI, Constants.ACTION);
}
}
1.13 +16 -32 ws-fx/addressing/src/org/apache/axis/message/addressing/AddressingHeaders.java
Index: AddressingHeaders.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/AddressingHeaders.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- AddressingHeaders.java 19 Jun 2004 18:40:12 -0000 1.12
+++ AddressingHeaders.java 22 Jun 2004 05:00:19 -0000 1.13
@@ -345,61 +345,45 @@
SOAPHeaderElement header = null;
if (messageID != null) {
- header = messageID.toSOAPHeaderElement(env);
- header.setActor(actorURI);
- if (setMustUnderstand)
- header.setMustUnderstand(true);
+ header = messageID.toSOAPHeaderElement(env, actorURI);
+ header.setMustUnderstand(setMustUnderstand);
}
if (to != null) {
- header = to.toSOAPHeaderElement(env);
- header.setActor(actorURI);
- if (setMustUnderstand)
- header.setMustUnderstand(true);
+ header = to.toSOAPHeaderElement(env, actorURI);
+ header.setMustUnderstand(setMustUnderstand);
}
if (action != null) {
- header = action.toSOAPHeaderElement(env);
- header.setActor(actorURI);
- if (setMustUnderstand)
- header.setMustUnderstand(true);
+ header = action.toSOAPHeaderElement(env, actorURI);
+ header.setMustUnderstand(setMustUnderstand);
}
if (from != null) {
- header = from.toSOAPHeaderElement(env);
- header.setActor(actorURI);
- if (setMustUnderstand)
- header.setMustUnderstand(true);
+ header = from.toSOAPHeaderElement(env, actorURI);
+ header.setMustUnderstand(setMustUnderstand);
}
if (replyTo != null) {
- header = replyTo.toSOAPHeaderElement(env);
- header.setActor(actorURI);
- if (setMustUnderstand)
- header.setMustUnderstand(true);
+ header = replyTo.toSOAPHeaderElement(env, actorURI);
+ header.setMustUnderstand(setMustUnderstand);
}
if (faultTo != null) {
- header = faultTo.toSOAPHeaderElement(env);
- header.setActor(actorURI);
- if (setMustUnderstand)
- header.setMustUnderstand(true);
+ header = faultTo.toSOAPHeaderElement(env, actorURI);
+ header.setMustUnderstand(setMustUnderstand);
}
if (recipient != null) {
- header = recipient.toSOAPHeaderElement(env);
- header.setActor(actorURI);
- if (setMustUnderstand)
- header.setMustUnderstand(true);
+ header = recipient.toSOAPHeaderElement(env, actorURI);
+ header.setMustUnderstand(setMustUnderstand);
}
if (relatesTo != null) {
for (int i = 0; i < relatesTo.size(); i++) {
RelatesTo rtp = (RelatesTo) relatesTo.get(i);
- header = rtp.toSOAPHeaderElement(env);
- header.setActor(actorURI);
- if (setMustUnderstand)
- header.setMustUnderstand(true);
+ header = rtp.toSOAPHeaderElement(env, actorURI);
+ header.setMustUnderstand(setMustUnderstand);
}
}
1.10 +10 -17 ws-fx/addressing/src/org/apache/axis/message/addressing/AttributedURI.java
Index: AttributedURI.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/AttributedURI.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- AttributedURI.java 18 Jun 2004 22:02:11 -0000 1.9
+++ AttributedURI.java 22 Jun 2004 05:00:19 -0000 1.10
@@ -18,6 +18,7 @@
package org.apache.axis.message.addressing;
import org.apache.axis.message.addressing.util.TextExtractor;
+import org.apache.axis.message.addressing.util.AddressingUtils;
import org.apache.axis.types.URI;
@@ -77,35 +78,27 @@
}
protected SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI,
String name)
throws Exception {
+ if (name == null) {
+ throw new IllegalArgumentException();
+ }
Name nm = env.createName(name,
Constants.NS_PREFIX_ADDRESSING,
Constants.NS_URI_ADDRESSING);
SOAPHeader header = env.getHeader();
+ if (header == null) {
+ header = env.addHeader();
+ }
// remove the header elements of this name if they
// already exist
- Iterator headers = header.getChildElements();
- List existingElements = new ArrayList();
- while (headers.hasNext())
- {
- SOAPHeaderElement hElement = (SOAPHeaderElement) headers.next();
- if (hElement.getLocalName().equals(name))
- {
- existingElements.add(hElement);
- }
-
- }
- for (int i = 0; i < existingElements.size(); i++)
- {
- SOAPHeaderElement el = (SOAPHeaderElement) existingElements.get(i);
- el.detachNode();
- }
-
+ AddressingUtils.removeHeader(header, actorURI, name);
// add the new header element
SOAPHeaderElement headerElement = header.addHeaderElement(nm);
+ headerElement.setActor(actorURI);
headerElement.addTextNode(toString());
return headerElement;
}
1.13 +22 -6 ws-fx/addressing/src/org/apache/axis/message/addressing/EndpointReference.java
Index: EndpointReference.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/EndpointReference.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- EndpointReference.java 18 Jun 2004 22:02:11 -0000 1.12
+++ EndpointReference.java 22 Jun 2004 05:00:19 -0000 1.13
@@ -18,6 +18,7 @@
package org.apache.axis.message.addressing;
import org.apache.axis.message.addressing.util.TextExtractor;
+import org.apache.axis.message.addressing.util.AddressingUtils;
import org.apache.axis.types.URI;
import org.apache.axis.utils.XMLUtils;
@@ -35,6 +36,7 @@
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeaderElement;
+import javax.xml.soap.SOAPHeader;
import javax.xml.parsers.ParserConfigurationException;
/**
@@ -230,26 +232,40 @@
return toDOM(doc, new QName(Constants.NS_URI_ADDRESSING, name));
}
- public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
+ public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI)
throws Exception {
- return toSOAPHeaderElement(env, Constants.ENDPOINT_REFERENCE);
+ return toSOAPHeaderElement(env, actorURI,
+ Constants.ENDPOINT_REFERENCE);
}
protected SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI,
String name)
throws Exception {
-
+ if (name == null) {
+ throw new IllegalArgumentException();
+ }
if (!(env instanceof org.apache.axis.message.SOAPEnvelope)) {
throw new Exception("Not supported");
}
+ SOAPHeader header = env.getHeader();
+ if (header == null) {
+ header = env.addHeader();
+ }
+ // remove the header elements of this name if they
+ // already exist
+ AddressingUtils.removeHeader(header, actorURI, name);
+
Document doc = XMLUtils.newDocument();
- org.apache.axis.message.SOAPHeaderElement header =
+ org.apache.axis.message.SOAPHeaderElement headerElem =
new org.apache.axis.message.SOAPHeaderElement(toDOM(doc, name));
- ((org.apache.axis.message.SOAPEnvelope)env).addHeader(header);
+ headerElem.setActor(actorURI);
+ ((org.apache.axis.message.SOAPEnvelope)env).addHeader(headerElem);
- return header;
+ return headerElem;
}
}
1.6 +3 -2 ws-fx/addressing/src/org/apache/axis/message/addressing/FaultTo.java
Index: FaultTo.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/FaultTo.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FaultTo.java 13 May 2004 12:52:20 -0000 1.5
+++ FaultTo.java 22 Jun 2004 05:00:19 -0000 1.6
@@ -74,9 +74,10 @@
super(element);
}
- public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
+ public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI)
throws Exception {
- return toSOAPHeaderElement(env, Constants.FAULT_TO);
+ return toSOAPHeaderElement(env, actorURI, Constants.FAULT_TO);
}
/**
1.6 +3 -2 ws-fx/addressing/src/org/apache/axis/message/addressing/From.java
Index: From.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/From.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- From.java 13 May 2004 12:52:20 -0000 1.5
+++ From.java 22 Jun 2004 05:00:19 -0000 1.6
@@ -74,9 +74,10 @@
super(element);
}
- public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
+ public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI)
throws Exception {
- return toSOAPHeaderElement(env, Constants.FROM);
+ return toSOAPHeaderElement(env, actorURI, Constants.FROM);
}
/**
1.7 +4 -3 ws-fx/addressing/src/org/apache/axis/message/addressing/MessageID.java
Index: MessageID.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/MessageID.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- MessageID.java 13 May 2004 12:52:20 -0000 1.6
+++ MessageID.java 22 Jun 2004 05:00:19 -0000 1.7
@@ -59,11 +59,12 @@
super(el);
}
- public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
+ public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI)
throws Exception {
- return toSOAPHeaderElement(env, Constants.MESSAGE_ID);
+ return toSOAPHeaderElement(env, actorURI, Constants.MESSAGE_ID);
}
-
+
}
1.6 +3 -2 ws-fx/addressing/src/org/apache/axis/message/addressing/Recipient.java
Index: Recipient.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/Recipient.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Recipient.java 13 May 2004 12:52:20 -0000 1.5
+++ Recipient.java 22 Jun 2004 05:00:19 -0000 1.6
@@ -65,9 +65,10 @@
super(element);
}
- public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
+ public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI)
throws Exception {
- return toSOAPHeaderElement(env, Constants.RECIPIENT);
+ return toSOAPHeaderElement(env, actorURI, Constants.RECIPIENT);
}
/**
1.8 +14 -2 ws-fx/addressing/src/org/apache/axis/message/addressing/RelatesTo.java
Index: RelatesTo.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/RelatesTo.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- RelatesTo.java 13 May 2004 12:52:20 -0000 1.7
+++ RelatesTo.java 22 Jun 2004 05:00:19 -0000 1.8
@@ -19,6 +19,7 @@
import org.apache.axis.message.SOAPHeaderElement;
import org.apache.axis.message.addressing.util.TextExtractor;
+import org.apache.axis.message.addressing.util.AddressingUtils;
import org.apache.axis.types.URI;
import javax.xml.namespace.QName;
@@ -97,13 +98,24 @@
}
}
- protected SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
+ protected SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI)
throws Exception {
Name nm = env.createName(Constants.RELATES_TO,
Constants.NS_PREFIX_ADDRESSING,
Constants.NS_URI_ADDRESSING);
SOAPHeader header = env.getHeader();
- SOAPHeaderElement headerElement = (SOAPHeaderElement)header.addHeaderElement(nm);
+ if (header == null) {
+ header = env.addHeader();
+ }
+
+ // remove the header elements of this name if they
+ // already exist
+ AddressingUtils.removeHeader(header, actorURI, Constants.RELATES_TO);
+
+ SOAPHeaderElement headerElement =
+ (SOAPHeaderElement)header.addHeaderElement(nm);
+ headerElement.setActor(actorURI);
QName type = getType();
1.6 +3 -2 ws-fx/addressing/src/org/apache/axis/message/addressing/ReplyTo.java
Index: ReplyTo.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/ReplyTo.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ReplyTo.java 13 May 2004 12:52:20 -0000 1.5
+++ ReplyTo.java 22 Jun 2004 05:00:19 -0000 1.6
@@ -74,9 +74,10 @@
super(element);
}
- public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
+ public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI)
throws Exception {
- return toSOAPHeaderElement(env, Constants.REPLY_TO);
+ return toSOAPHeaderElement(env, actorURI, Constants.REPLY_TO);
}
/**
1.6 +3 -2 ws-fx/addressing/src/org/apache/axis/message/addressing/To.java
Index: To.java
===================================================================
RCS file: /home/cvs/ws-fx/addressing/src/org/apache/axis/message/addressing/To.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- To.java 13 May 2004 12:52:20 -0000 1.5
+++ To.java 22 Jun 2004 05:00:19 -0000 1.6
@@ -73,9 +73,10 @@
super(el);
}
- public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env)
+ public SOAPHeaderElement toSOAPHeaderElement(SOAPEnvelope env,
+ String actorURI)
throws Exception {
- return toSOAPHeaderElement(env, Constants.TO);
+ return toSOAPHeaderElement(env, actorURI, Constants.TO);
}
1.1 ws-fx/addressing/src/org/apache/axis/message/addressing/util/AddressingUtils.java
Index: AddressingUtils.java
===================================================================
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* Licensed 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.axis.message.addressing.util;
import org.apache.axis.message.addressing.Constants;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
/**
* Class AddressingUtils
*
* @author Jarek Gawor (gawor@apache.org)
*/
public class AddressingUtils {
public static void removeHeader(SOAPHeader soapHeader,
String actorURI,
String headerName) {
if (soapHeader == null) {
return;
}
Iterator headers = soapHeader.examineHeaderElements(actorURI);
List existingElements = new ArrayList();
while (headers.hasNext()) {
SOAPHeaderElement hElement = (SOAPHeaderElement) headers.next();
Name hName = hElement.getElementName();
if (Constants.NS_URI_ADDRESSING.equals(hName.getURI()) &&
hName.getLocalName().equals(headerName)) {
existingElements.add(hElement);
}
}
for (int i = 0; i < existingElements.size(); i++) {
SOAPHeaderElement el = (SOAPHeaderElement) existingElements.get(i);
el.detachNode();
}
}
}