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 ch...@apache.org on 2005/12/11 04:01:33 UTC
svn commit: r355879 - in /webservices/axis2/trunk/java/modules:
addressing/src/org/apache/axis2/handlers/addressing/
saaj/src/javax/xml/soap/ saaj/src/org/apache/axis2/saaj/
saaj/src/org/apache/axis2/soap/impl/dom/ xml/src/org/apache/axis2/soap/
xml/sr...
Author: chinthaka
Date: Sat Dec 10 19:01:24 2005
New Revision: 355879
URL: http://svn.apache.org/viewcvs?rev=355879&view=rev
Log:
Fixing a NPE problem in AddressingOutHandler and improving the code (Thanks Paul and Saminda for pointing out the bug and thanks Sanjiva for the tip to improve the code)
Modified:
webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPEnvelope.java
webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPHeader.java
webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java
webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/soap/impl/dom/SOAPEnvelopeImpl.java
webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPEnvelope.java
webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/SOAPEnvelopeImpl.java
webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/soap/SOAPEnvelopeTest.java
Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java?rev=355879&r1=355878&r2=355879&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 Sat Dec 10 19:01:24 2005
@@ -21,11 +21,13 @@
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.addressing.MessageInformationHeaders;
+import org.apache.axis2.addressing.RelatesTo;
import org.apache.axis2.addressing.ServiceName;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.om.OMAbstractFactory;
import org.apache.axis2.om.OMElement;
import org.apache.axis2.om.OMNamespace;
+import org.apache.axis2.soap.SOAPEnvelope;
import org.apache.axis2.soap.SOAPHeader;
import org.apache.axis2.soap.SOAPHeaderBlock;
import org.apache.wsdl.WSDLConstants;
@@ -86,26 +88,26 @@
MessageInformationHeaders messageInformationHeaders =
msgContext.getMessageInformationHeaders();
- SOAPHeader soapHeader = msgContext.getEnvelope().getHeader();
+ SOAPEnvelope envelope = msgContext.getEnvelope();
+ SOAPHeader soapHeader = envelope.getHeader();
// by this time, we definitely have some addressing information to be sent. This is because,
// we have tested at the start of this whether messageInformationHeaders are null or not.
// So rather than declaring addressing namespace in each and every addressing header, lets
// define that in the Header itself.
- soapHeader.declareNamespace(addressingNamespaceObject);
+ envelope.declareNamespace(addressingNamespaceObject);
// processing WSA To
EndpointReference epr = messageInformationHeaders.getTo();
- if (epr != null && !isAddressingHeaderAlreadyAvailable(WSA_TO, soapHeader)) {
+ if (epr != null && !isAddressingHeaderAlreadyAvailable(WSA_TO, envelope)) {
String address = epr.getAddress();
if (!"".equals(address) && address != null) {
- SOAPHeaderBlock toHeaderBlock = soapHeader.addHeaderBlock(
- WSA_TO, addressingNamespaceObject);
+ SOAPHeaderBlock toHeaderBlock = envelope.addHeaderBlock(WSA_TO, addressingNamespaceObject);
toHeaderBlock.setText(address);
}
- processReferenceInformation(epr.getAllReferenceParameters(), soapHeader);
+ processReferenceInformation(epr.getAllReferenceParameters(), soapHeader );
processReferenceInformation(epr.getAllReferenceProperties(), soapHeader);
addToHeader(epr, soapHeader);
@@ -113,12 +115,12 @@
// processing WSA Action
String action = messageInformationHeaders.getAction();
- if (action != null && !isAddressingHeaderAlreadyAvailable(WSA_ACTION, soapHeader)) {
- processStringInfo(action, WSA_ACTION, soapHeader);
+ if (action != null && !isAddressingHeaderAlreadyAvailable(WSA_ACTION, envelope)) {
+ processStringInfo(action, WSA_ACTION, envelope);
}
// processing WSA replyTo
- if (!isAddressingHeaderAlreadyAvailable(WSA_REPLY_TO, soapHeader)) {
+ if (!isAddressingHeaderAlreadyAvailable(WSA_REPLY_TO, envelope)) {
epr = messageInformationHeaders.getReplyTo();
if (epr == null) {//optional
// setting anonymous URI. Defaulting to Final.
@@ -134,33 +136,33 @@
epr.addReferenceParameter(new QName(Constants.AXIS2_NAMESPACE_URI,
Constants.SERVICE_GROUP_ID, Constants.AXIS2_NAMESPACE_PREFIX), serviceGroupContextId);
}
- addToSOAPHeader(epr, AddressingConstants.WSA_REPLY_TO, soapHeader);
+ addToSOAPHeader(epr, AddressingConstants.WSA_REPLY_TO, envelope);
}
epr = messageInformationHeaders.getFrom();
if (epr != null) {//optional
- addToSOAPHeader(epr, AddressingConstants.WSA_FROM, soapHeader);
+ addToSOAPHeader(epr, AddressingConstants.WSA_FROM, envelope);
}
epr = messageInformationHeaders.getFaultTo();
if (epr != null) {//optional
- addToSOAPHeader(epr, AddressingConstants.WSA_FAULT_TO, soapHeader);
+ addToSOAPHeader(epr, AddressingConstants.WSA_FAULT_TO, envelope);
}
String messageID = messageInformationHeaders.getMessageId();
- if (messageID != null && !isAddressingHeaderAlreadyAvailable(WSA_MESSAGE_ID, soapHeader)) {//optional
- processStringInfo(messageID, WSA_MESSAGE_ID, soapHeader);
+ if (messageID != null && !isAddressingHeaderAlreadyAvailable(WSA_MESSAGE_ID, envelope)) {//optional
+ processStringInfo(messageID, WSA_MESSAGE_ID, envelope);
}
- if (!isAddressingHeaderAlreadyAvailable(WSA_RELATES_TO, soapHeader)) {
- org.apache.axis2.addressing.RelatesTo relatesTo = messageInformationHeaders.getRelatesTo();
+ if (!isAddressingHeaderAlreadyAvailable(WSA_RELATES_TO, envelope)) {
+ RelatesTo relatesTo = messageInformationHeaders.getRelatesTo();
OMElement relatesToHeader = null;
if (relatesTo != null) {
relatesToHeader =
processStringInfo(relatesTo.getValue(),
WSA_RELATES_TO,
- soapHeader);
+ envelope);
}
if (relatesToHeader != null)
@@ -179,10 +181,10 @@
private OMElement processStringInfo(String value,
String type,
- SOAPHeader soapHeader) {
+ SOAPEnvelope soapEnvelope) {
if (!"".equals(value) && value != null) {
SOAPHeaderBlock soapHeaderBlock =
- soapHeader.addHeaderBlock(type, addressingNamespaceObject);
+ soapEnvelope.addHeaderBlock(type, addressingNamespaceObject);
soapHeaderBlock.addChild(
OMAbstractFactory.getOMFactory().createText(value));
return soapHeaderBlock;
@@ -192,13 +194,13 @@
protected void addToSOAPHeader(EndpointReference epr,
String type,
- SOAPHeader soapHeader) {
- if (epr == null || isAddressingHeaderAlreadyAvailable(type, soapHeader)) {
+ SOAPEnvelope envelope) {
+ if (epr == null || isAddressingHeaderAlreadyAvailable(type, envelope)) {
return;
}
SOAPHeaderBlock soapHeaderBlock =
- soapHeader.addHeaderBlock(type, addressingNamespaceObject);
+ envelope.addHeaderBlock(type, addressingNamespaceObject);
String address = epr.getAddress();
if (!"".equals(address) && address != null) {
@@ -231,7 +233,7 @@
OMAbstractFactory.getOMFactory().createOMElement(
Submission.EPR_REFERENCE_PROPERTIES,
addressingNamespaceObject);
- soapHeader.addChild(reference);
+ envelope.getHeader().addChild(reference);
processReferenceInformation(referenceParameters, reference);
}
@@ -296,8 +298,13 @@
}
}
- private boolean isAddressingHeaderAlreadyAvailable(String name, SOAPHeader soapHeader) {
- return soapHeader.getFirstChildWithName(new QName(addressingNamespaceObject.getName(), name, addressingNamespaceObject.getPrefix())) != null;
+ private boolean isAddressingHeaderAlreadyAvailable(String name, SOAPEnvelope envelope) {
+ boolean isAvail = envelope.getFirstChildWithName(new QName(addressingNamespaceObject.getName(), name, addressingNamespaceObject.getPrefix())) != null;
+ if(!isAvail && envelope.getHeader() != null){
+ // check in headers too
+ isAvail = envelope.getHeader().getFirstChildWithName(new QName(addressingNamespaceObject.getName(), name, addressingNamespaceObject.getPrefix())) != null;
+ }
+ return isAvail;
}
}
Modified: webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPEnvelope.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPEnvelope.java?rev=355879&r1=355878&r2=355879&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPEnvelope.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPEnvelope.java Sat Dec 10 19:01:24 2005
@@ -56,7 +56,7 @@
* </PRE>
* To create a <CODE>SOAPHeader</CODE> object to replace the one
* that was removed, a client uses the method <CODE>
- * SOAPEnvelope.addHeader</CODE>, which creates a new header and
+ * SOAPEnvelope.addHeaderBlock</CODE>, which creates a new header and
* adds it to the <CODE>SOAPEnvelope</CODE> object. Similarly, the
* method <CODE>addBody</CODE> creates a new <CODE>SOAPBody</CODE>
* object and adds it to the <CODE>SOAPEnvelope</CODE> object. The
@@ -67,7 +67,7 @@
* SOAPPart sp = message.getSOAPPart();
* SOAPEnvelope se = sp.getEnvelope();
* se.getHeader().detachNode();
- * SOAPHeader sh = se.addHeader();
+ * SOAPHeader sh = se.addHeaderBlock();
* se.getBody().detachNode();
* SOAPBody sb = se.addBody();
* </PRE>
Modified: webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPHeader.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPHeader.java?rev=355879&r1=355878&r2=355879&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPHeader.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPHeader.java Sat Dec 10 19:01:24 2005
@@ -35,12 +35,12 @@
* se.getHeader().detachNode();
* </PRE>
* A <CODE>SOAPHeader</CODE> object is created with the <CODE>
- * SOAPEnvelope</CODE> method <CODE>addHeader</CODE>. This method,
+ * SOAPEnvelope</CODE> method <CODE>addHeaderBlock</CODE>. This method,
* which creates a new header and adds it to the envelope, may be
* called only after the existing header has been removed.
* <PRE>
* se.getHeader().detachNode();
- * SOAPHeader sh = se.addHeader();
+ * SOAPHeader sh = se.addHeaderBlock();
* </PRE>
* <p/>
* <P>A <CODE>SOAPHeader</CODE> object can have only <CODE>
Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java?rev=355879&r1=355878&r2=355879&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java Sat Dec 10 19:01:24 2005
@@ -139,7 +139,7 @@
}
/**
- * method addHeader
+ * method addHeaderBlock
*
* @return
* @throws SOAPException
Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/soap/impl/dom/SOAPEnvelopeImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/soap/impl/dom/SOAPEnvelopeImpl.java?rev=355879&r1=355878&r2=355879&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/soap/impl/dom/SOAPEnvelopeImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/soap/impl/dom/SOAPEnvelopeImpl.java Sat Dec 10 19:01:24 2005
@@ -25,16 +25,7 @@
import org.apache.axis2.om.impl.OMOutputImpl;
import org.apache.axis2.om.impl.dom.DocumentImpl;
import org.apache.axis2.om.impl.dom.NamespaceImpl;
-import org.apache.axis2.soap.SOAP11Constants;
-import org.apache.axis2.soap.SOAP12Constants;
-import org.apache.axis2.soap.SOAPBody;
-import org.apache.axis2.soap.SOAPConstants;
-import org.apache.axis2.soap.SOAPEnvelope;
-import org.apache.axis2.soap.SOAPFactory;
-import org.apache.axis2.soap.SOAPHeader;
-import org.apache.axis2.soap.SOAPHeaderBlock;
-import org.apache.axis2.soap.SOAPProcessingException;
-import org.apache.axis2.soap.impl.dom.SOAPElement;
+import org.apache.axis2.soap.*;
import org.apache.axis2.soap.impl.dom.factory.DOMSOAPFactory;
import org.apache.axis2.soap.impl.dom.soap11.SOAP11Factory;
@@ -101,28 +92,32 @@
/**
* Convenience method to add a SOAP header to this envelope
*
- * @param namespaceURI
* @param name
- */
- public SOAPHeaderBlock addHeader(String namespaceURI, String name)
+ * @param namespaceURI
+ */
+ public SOAPHeaderBlock addHeaderBlock(String name, String namespaceURI)
throws OMException {
// TODO : cache SOAP header and body instead of looking them up?
- SOAPHeader headerContainer = getHeader();
OMNamespace namespace = factory.createOMNamespace(namespaceURI, null);
- return factory.createSOAPHeaderBlock(name, namespace, headerContainer);
+ return this.addHeaderBlock(name, namespace);
}
- public void addChild(OMNode child) {
- if ((child instanceof OMElement)
- && !(child instanceof SOAPHeader || child instanceof SOAPBody)) {
- throw new SOAPProcessingException(
- "SOAP Envelope can not have children other than SOAP Header and Body",
- SOAP12Constants.FAULT_CODE_SENDER);
- } else {
- super.addChild(child);
- }
- }
+ public SOAPHeaderBlock addHeaderBlock(String name, OMNamespace namespace) throws OMException {
+ SOAPHeader headerContainer = getHeader();
+ return factory.createSOAPHeaderBlock(name, namespace, headerContainer);
+ }
+
+ public void addChild(OMNode child) {
+ if ((child instanceof OMElement)
+ && !(child instanceof SOAPHeader || child instanceof SOAPBody)) {
+ throw new SOAPProcessingException(
+ "SOAP Envelope can not have children other than SOAP Header and Body",
+ SOAP12Constants.FAULT_CODE_SENDER);
+ } else {
+ super.addChild(child);
+ }
+ }
/**
* Returns the <CODE>SOAPBody</CODE> object associated with this <CODE>SOAPEnvelope</CODE>
Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPEnvelope.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPEnvelope.java?rev=355879&r1=355878&r2=355879&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPEnvelope.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPEnvelope.java Sat Dec 10 19:01:24 2005
@@ -18,6 +18,7 @@
import org.apache.axis2.om.OMElement;
import org.apache.axis2.om.OMException;
+import org.apache.axis2.om.OMNamespace;
/**
* Interface SOAPEnvelope
@@ -41,10 +42,13 @@
/**
* Convenience method to add a SOAP header to this envelope
*
- * @param namespaceURI
* @param name
+ * @param namespaceURI
*/
- public abstract SOAPHeaderBlock addHeader(String namespaceURI, String name)
+ public abstract SOAPHeaderBlock addHeaderBlock(String name, String namespaceURI)
+ throws OMException;
+
+ public abstract SOAPHeaderBlock addHeaderBlock(String name, OMNamespace namespace)
throws OMException;
/**
Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/SOAPEnvelopeImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/SOAPEnvelopeImpl.java?rev=355879&r1=355878&r2=355879&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/SOAPEnvelopeImpl.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/SOAPEnvelopeImpl.java Sat Dec 10 19:01:24 2005
@@ -85,18 +85,20 @@
/**
* Convenience method to add a SOAP header to this envelope
*
- * @param namespaceURI
* @param name
+ * @param namespaceURI
*/
- public SOAPHeaderBlock addHeader(String namespaceURI, String name)
+ public SOAPHeaderBlock addHeaderBlock(String name, String namespaceURI)
throws OMException {
// TODO : cache SOAP header and body instead of looking them up?
- SOAPHeader headerContainer = getHeader();
OMNamespace namespace = factory.createOMNamespace(namespaceURI, null);
- return factory.createSOAPHeaderBlock(name,
- namespace,
- headerContainer);
+ return this.addHeaderBlock(name, namespace);
+ }
+
+ public SOAPHeaderBlock addHeaderBlock(String name, OMNamespace namespace) throws OMException {
+ SOAPHeader headerContainer = getHeader();
+ return factory.createSOAPHeaderBlock(name,namespace,headerContainer);
}
public void addChild(OMNode child) {
Modified: webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/soap/SOAPEnvelopeTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/soap/SOAPEnvelopeTest.java?rev=355879&r1=355878&r2=355879&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/soap/SOAPEnvelopeTest.java (original)
+++ webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/soap/SOAPEnvelopeTest.java Sat Dec 10 19:01:24 2005
@@ -25,10 +25,10 @@
super(testName);
soap11Envelope = soap11Factory.getDefaultEnvelope();
// Toss in a header to make sure the SOAPHeader gets set up
- soap11Envelope.addHeader("http://ns", "dummy");
+ soap11Envelope.addHeaderBlock("dummy", "http://ns");
soap12Envelope = soap12Factory.getDefaultEnvelope();
// Toss in a header to make sure the SOAPHeader gets set up
- soap12Envelope.addHeader("http://ns", "dummy");
+ soap12Envelope.addHeaderBlock("dummy", "http://ns");
}
//SOAP 1.1 Envelope Test (Programaticaly Created)-----------------------------------------------