Author: scheu
Date: Fri Nov 16 07:36:10 2007
New Revision: 595705
URL: http://svn.apache.org/viewvc?rev=595705&view=rev
Log:
WSCOMMONS-276
Contributor:Rich Scheuerle
Test From:David Illsley
David's test revealed several minor problems with the new CustomBuilder code
usage with
headers.
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java?rev=595705&r1=595704&r2=595705&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java
Fri Nov 16 07:36:10 2007
@@ -27,6 +27,8 @@
import org.apache.axiom.om.impl.builder.CustomBuilder;
import org.apache.axiom.om.impl.serialize.StreamingOMSerializer;
import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPHeader;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
@@ -79,7 +81,13 @@
// Create an OMSourcedElement backed by the ByteArrayDataSource
OMNamespace ns = factory.createOMNamespace(namespace, prefix);
- OMElement om = factory.createOMElement(ds, localPart, ns);
+
+ OMElement om = null;
+ if (parent instanceof SOAPHeader && factory instanceof
SOAPFactory) {
+ om = ((SOAPFactory)factory).createSOAPHeaderBlock(localPart,
ns, ds);
+ } else {
+ om = factory.createOMElement(ds, localPart, ns);
+ }
// Add the new OMSourcedElement ot the parent
parent.addChild(om);
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java?rev=595705&r1=595704&r2=595705&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
Fri Nov 16 07:36:10 2007
@@ -250,22 +250,24 @@
protected OMNode createNextOMElement() {
OMNode newElement = null;
if (elementLevel == 1 && this.customBuilderForPayload != null) {
- newElement = createWithCustomBuilder(customBuilderForPayload);
+ newElement = createWithCustomBuilder(customBuilderForPayload,
omfactory);
} else if (customBuilders != null && elementLevel <=
this.maxDepthForCustomBuilders) {
String namespace = parser.getNamespaceURI();
String localPart = parser.getLocalName();
CustomBuilder customBuilder = getCustomBuilder(namespace,
localPart);
if (customBuilder != null) {
- createWithCustomBuilder(customBuilder);
+ newElement = createWithCustomBuilder(customBuilder, omfactory);
}
}
if (newElement == null) {
newElement = createOMElement();
+ } else {
+ elementLevel--; // Decrease level since custom builder read the
end element event
}
return newElement;
}
- protected OMNode createWithCustomBuilder(CustomBuilder customBuilder) {
+ protected OMNode createWithCustomBuilder(CustomBuilder customBuilder,
OMFactory factory) {
String namespace = parser.getNamespaceURI();
String localPart = parser.getLocalName();
OMContainer parent = null;
@@ -277,7 +279,7 @@
}
}
- return customBuilder.create(namespace, localPart, parent, parser,
omfactory);
+ return customBuilder.create(namespace, localPart, parent, parser,
factory);
}
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java?rev=595705&r1=595704&r2=595705&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
Fri Nov 16 07:36:10 2007
@@ -174,7 +174,7 @@
parent = (OMNode) lastNode.getParent();
}
if (parent instanceof SOAPBody) {
- newElement = createWithCustomBuilder(customBuilderForPayload);
+ newElement = createWithCustomBuilder(customBuilderForPayload,
soapFactory);
}
}
if (newElement == null && customBuilders != null &&
@@ -183,11 +183,13 @@
String localPart = parser.getLocalName();
CustomBuilder customBuilder = getCustomBuilder(namespace,
localPart);
if (customBuilder != null) {
- createWithCustomBuilder(customBuilder);
+ newElement = createWithCustomBuilder(customBuilder,
soapFactory);
}
}
if (newElement == null) {
newElement = createOMElement();
+ } else {
+ elementLevel--; // Decrease level since custom builder read the
end element event
}
return newElement;
}
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java?rev=595705&r1=595704&r2=595705&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java
Fri Nov 16 07:36:10 2007
@@ -32,11 +32,13 @@
import org.apache.axiom.soap.SOAPHeaderBlock;
import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
+import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import java.io.File;
import java.io.FileReader;
+import java.util.ArrayList;
import java.util.Iterator;
/**
@@ -55,6 +57,25 @@
public void testSample1() throws Exception {
File file = getTestResourceFile(TestConstants.SAMPLE1);
copyAndCheck(createEnvelope(file), true);
+ }
+
+ public void testHeaderCustomBuilder() throws Exception{
+ XMLStreamReader parser =
+ XMLInputFactory.newInstance().createXMLStreamReader(new
+
FileReader(getTestResourceFile(TestConstants.SOAP_SOAPMESSAGE)));
+ StAXSOAPModelBuilder builder = new StAXSOAPModelBuilder(parser, null);
+ builder.registerCustomBuilder(new
QName("http://schemas.xmlsoap.org/ws/2004/03/addressing","To"), 3, new
+ ByteArrayCustomBuilder("utf-8"));
+ SOAPEnvelope sourceEnv = (SOAPEnvelope) builder.getDocumentElement();
+ SOAPHeader header = sourceEnv.getHeader();
+ ArrayList al =
+
header.getHeaderBlocksWithNSURI("http://schemas.xmlsoap.org/ws/2004/03/addressing");
+ for(int i=0;i<al.size();i++){
+ SOAPHeaderBlock shb = (SOAPHeaderBlock)al.get(i);
+ if("To".equals(shb.getLocalName())){
+ assertNotNull(shb.getDataSource());
+ }
+ }
}
public void testSOAPMESSAGE() throws Exception {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]