You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2006/01/05 12:19:51 UTC
svn commit: r366162 - in
/incubator/servicemix/trunk/servicemix-components/src:
main/java/org/apache/servicemix/components/saaj/SaajMarshaler.java
test/java/org/apache/servicemix/components/saaj/SaajMarshalerTest.java
Author: gnodet
Date: Thu Jan 5 03:19:43 2006
New Revision: 366162
URL: http://svn.apache.org/viewcvs?rev=366162&view=rev
Log:
Fix problems with saaj marshaler depending on implementation used.
Also fix SM-249.
Added:
incubator/servicemix/trunk/servicemix-components/src/test/java/org/apache/servicemix/components/saaj/SaajMarshalerTest.java
Modified:
incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/saaj/SaajMarshaler.java
Modified: incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/saaj/SaajMarshaler.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/saaj/SaajMarshaler.java?rev=366162&r1=366161&r2=366162&view=diff
==============================================================================
--- incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/saaj/SaajMarshaler.java (original)
+++ incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/saaj/SaajMarshaler.java Thu Jan 5 03:19:43 2006
@@ -18,7 +18,9 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
+import org.w3c.dom.Attr;
import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
import javax.activation.DataHandler;
import javax.jbi.messaging.MessagingException;
@@ -65,9 +67,32 @@
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPBody soapBody = soapPart.getEnvelope().getBody();
- SOAPElement elem = (SOAPElement) soapBody.getChildElements().next();
+ SOAPElement elem = null;
+ for (Iterator it = soapBody.getChildElements(); it.hasNext();) {
+ Object child = it.next();
+ if (child instanceof SOAPElement) {
+ elem = (SOAPElement) child;
+ break;
+ }
+ }
+ if (elem == null) {
+ throw new IllegalStateException("Could not find any element in soap body");
+ }
for (SOAPElement parent = elem.getParentElement(); parent != null; parent = parent.getParentElement()) {
+ // The following code works with sun saaj implementation
+ NamedNodeMap attributes = parent.getAttributes();
+ if (attributes != null) {
+ for (int i = 0; i < attributes.getLength(); i++) {
+ Attr att = (Attr) parent.getAttributes().item(i);
+ if (att.getName().startsWith(XMLConstants.XMLNS_ATTRIBUTE + ":")
+ && elem.getAttributeNodeNS(att.getNamespaceURI(), att.getLocalName()) == null) {
+ elem.addNamespaceDeclaration(att.getName().substring(XMLConstants.XMLNS_ATTRIBUTE.length() + 1), att.getValue());
+ elem.setAttributeNS(att.getNamespaceURI(), att.getName(), att.getValue());
+ }
+ }
+ }
+ // The following code works with axis saaj implementation
for (Iterator itNs = parent.getNamespacePrefixes(); itNs.hasNext();) {
String prefix = (String) itNs.next();
String nsuri = parent.getNamespaceURI(prefix);
@@ -76,7 +101,7 @@
elem.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, XMLConstants.XMLNS_ATTRIBUTE + ":" + prefix, nsuri);
}
}
- }
+ }
if (log.isDebugEnabled()) {
try {
Added: incubator/servicemix/trunk/servicemix-components/src/test/java/org/apache/servicemix/components/saaj/SaajMarshalerTest.java
URL: http://svn.apache.org/viewcvs/incubator/servicemix/trunk/servicemix-components/src/test/java/org/apache/servicemix/components/saaj/SaajMarshalerTest.java?rev=366162&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-components/src/test/java/org/apache/servicemix/components/saaj/SaajMarshalerTest.java (added)
+++ incubator/servicemix/trunk/servicemix-components/src/test/java/org/apache/servicemix/components/saaj/SaajMarshalerTest.java Thu Jan 5 03:19:43 2006
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2005-2006 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.servicemix.components.saaj;
+
+import java.io.InputStream;
+
+import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.namespace.QName;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.MimeHeaders;
+import javax.xml.soap.SOAPMessage;
+
+import org.apache.servicemix.jbi.jaxp.SourceTransformer;
+import org.apache.servicemix.jbi.messaging.NormalizedMessageImpl;
+import org.apache.servicemix.jbi.util.DOMUtil;
+import org.apache.xpath.CachedXPathAPI;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.traversal.NodeIterator;
+
+import junit.framework.TestCase;
+
+public class SaajMarshalerTest extends TestCase {
+
+
+ public void testAxis() throws Exception {
+ MessageFactory messageFactory = new org.apache.axis.soap.MessageFactoryImpl();
+ testFactory(messageFactory);
+ }
+
+ /*
+ public void testAxis2() throws Exception {
+ MessageFactory messageFactory = new org.apache.axis2.saaj.MessageFactoryImpl();
+ testFactory(messageFactory);
+ }
+ */
+
+ public void testSun() throws Exception {
+ MessageFactory messageFactory = new com.sun.xml.messaging.saaj.soap.MessageFactoryImpl();
+ testFactory(messageFactory);
+ }
+
+ protected void testFactory(MessageFactory messageFactory) throws Exception {
+ MimeHeaders headers = new MimeHeaders();
+ headers.addHeader("Content-Type", "text/xml;");
+ InputStream is = getClass().getClassLoader().getResourceAsStream("org/apache/servicemix/components/http/soap-response.xml");
+ SOAPMessage sm = messageFactory.createMessage(headers, is);
+ NormalizedMessage nm = new NormalizedMessageImpl();
+ new SaajMarshaler().toNMS(nm, sm);
+
+ Node node = new SourceTransformer().toDOMNode(new SourceTransformer().toStreamSource(nm.getContent()));
+ System.out.println(new SourceTransformer().toString(node));
+
+ CachedXPathAPI cachedXPathAPI = new CachedXPathAPI();
+ NodeIterator iterator = cachedXPathAPI.selectNodeIterator(node, "//*[local-name() = 'userId']");
+ Element root = (Element) iterator.nextNode();
+ QName qname = DOMUtil.createQName(root, root.getAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "type"));
+ assertEquals("http://www.w3.org/2001/XMLSchema", qname.getNamespaceURI());
+ assertEquals("string", qname.getLocalPart());
+ }
+
+}