blob: 42164b39e0dbfbb32c7c19e19b5fd973e0b34f00 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.axis2.saaj;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.Name;
import javax.xml.soap.Node;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPFault;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.Text;
import java.util.Iterator;
@RunWith(SAAJTestRunner.class)
public class SOAPBodyTest extends Assert {
/**
* Method suite
*
* @return
*/
/* public static Test suite() {
return new TestSuite(test.message.TestSOAPBody.class);
}
*/
/**
* Method testSoapBodyBUG
*
* @throws Exception
*/
@Validated @Test
public void testSoapBody() throws Exception {
MessageFactory fact = MessageFactory.newInstance();
SOAPMessage message = fact.createMessage();
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope env = soapPart.getEnvelope();
SOAPHeader header = env.getHeader();
Name hns = env.createName("Hello",
"shw",
"http://www.jcommerce.net/soap/ns/SOAPHelloWorld");
SOAPElement headElmnt = header.addHeaderElement(hns);
Name hns1 = env.createName("Myname",
"shw",
"http://www.jcommerce.net/soap/ns/SOAPHelloWorld");
SOAPElement myName = headElmnt.addChildElement(hns1);
myName.addTextNode("Tony");
Name ns = env.createName("Address",
"shw",
"http://www.jcommerce.net/soap/ns/SOAPHelloWorld");
SOAPBody body = env.getBody();
SOAPElement bodyElmnt = body.addBodyElement(ns);
Name ns1 = env.createName("City",
"shw",
"http://www.jcommerce.net/soap/ns/SOAPHelloWorld");
SOAPElement city = bodyElmnt.addChildElement(ns1);
city.addTextNode("GENT");
SOAPElement city2 = body.addChildElement(ns1);
assertTrue(city2 instanceof SOAPBodyElement);
city2.addTextNode("CIT2");
Iterator it = body.getChildElements();
int count = 0;
while (it.hasNext()) {
Object o = it.next();
assertTrue(o instanceof SOAPBodyElement);
SOAPBodyElement bodyElement = (SOAPBodyElement)o;
assertEquals("http://www.jcommerce.net/soap/ns/SOAPHelloWorld",
bodyElement.getNamespaceURI());
assertEquals("shw", bodyElement.getPrefix());
assertTrue(bodyElement.getLocalName().equals("City") ||
bodyElement.getLocalName().equals("Address"));
count++;
}
assertEquals(2, count);
}
public void _testAddDocument() {
try {
Document document = null;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.parse(TestUtils.getTestFileURI("soap-body.xml"));
MessageFactory fact = MessageFactory.newInstance();
SOAPMessage message = fact.createMessage();
message.getSOAPHeader().detachNode();
// assertNull(message.getSOAPHeader());
// TODO:this fails. Header is always being created if it doesnt exist in DOOM
SOAPBody soapBody = message.getSOAPBody();
soapBody.addDocument(document);
message.saveChanges();
// Get contents using SAAJ APIs
Iterator iter1 = soapBody.getChildElements();
getContents(iter1, "");
} catch (Exception e) {
e.printStackTrace();
fail("Unexpected Exception : " + e);
}
}
private void getContents(Iterator iterator, String indent) {
while (iterator.hasNext()) {
Node node = (Node)iterator.next();
SOAPElement element = null;
Text text = null;
if (node instanceof SOAPElement) {
element = (SOAPElement)node;
Name name = element.getElementName();
Iterator attrs = element.getAllAttributes();
/*
while (attrs.hasNext()) {
Name attrName = (Name) attrs.next();
System.out.println(indent + " Attribute name is " +
attrName.getQualifiedName());
System.out.println(indent + " Attribute value is " +
element.getAttributeValue(attrName));
}
*/
Iterator iter2 = element.getChildElements();
getContents(iter2, indent + " ");
} else {
text = (Text)node;
assertNotNull(text);
}
}
}
@Validated @Test
public void testExtractContentAsDocument() throws Exception {
MessageFactory fact = MessageFactory.newInstance();
SOAPMessage message = fact.createMessage();
SOAPBody soapBody = message.getSOAPBody();
QName qname1 = new QName("http://wombat.ztrade.com",
"GetLastTradePrice", "ztrade");
SOAPElement child1 = soapBody.addChildElement(qname1);
Document document = soapBody.extractContentAsDocument();
assertNotNull(document);
assertTrue(document instanceof Document);
Element element = document.getDocumentElement();
String elementName = element.getTagName();
//Retreive the children of the SOAPBody (should be none)
Iterator childElements = soapBody.getChildElements();
int childCount = 0;
while (childElements.hasNext()) {
Object object = childElements.next();
childCount++;
}
assertEquals(childCount, 0);
}
/*
* For SOAP 1.1 message
*/
@Validated @Test
public void testAddAttribute() {
try {
MessageFactory fact = MessageFactory.newInstance();
SOAPMessage message = fact.createMessage();
SOAPBody soapBody = message.getSOAPBody();
QName qname = new QName("http://test.apache.org/", "Child1", "ch");
String value = "MyValue1";
soapBody.addAttribute(qname, value);
message.saveChanges();
} catch (Exception e) {
fail("Unexpected Exception : " + e);
}
}
/*
* For SOAP 1.2 message
*/
@Validated @Test
public void testAddAttribute2() {
try {
MessageFactory fact = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SOAPMessage message = fact.createMessage();
SOAPBody soapBody = message.getSOAPBody();
QName qname = new QName("http://test.apache.org/", "Child1", "ch");
String value = "MyValue1";
soapBody.addAttribute(qname, value);
message.saveChanges();
} catch (Exception e) {
fail("Unexpected Exception : " + e);
}
}
/*
* For SOAP 1.2 message
*/
@Validated @Test
public void testAddFault() {
try {
MessageFactory fact = MessageFactory.newInstance();
SOAPMessage message = fact.createMessage();
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
SOAPBody soapBody = soapEnvelope.getBody();
QName qname = new QName("http://test.apache.org/", "Child1", "ch");
String value = "MyFault";
SOAPFault soapFault = soapBody.addFault(qname, value);
message.saveChanges();
assertNotNull(soapFault);
assertTrue(soapFault instanceof SOAPFault);
} catch (Exception e) {
fail("Unexpected Exception : " + e);
}
}
@Validated @Test
public void testAppendChild() throws Exception {
MessageFactory fact = MessageFactory.newInstance();
SOAPMessage message = fact.createMessage();
SOAPBody soapBody = message.getSOAPBody();
assertEquals(0, soapBody.getChildNodes().getLength());
assertFalse(soapBody.getChildElements().hasNext());
Document doc = soapBody.getOwnerDocument();
String namespace = "http://example.com";
String localName = "GetLastTradePrice";
Element getLastTradePrice = doc.createElementNS(namespace, localName);
Element symbol = doc.createElement("symbol");
symbol.setAttribute("foo", "bar");
getLastTradePrice.appendChild(symbol);
org.w3c.dom.Text def = doc.createTextNode("DEF");
symbol.appendChild(def);
soapBody.appendChild(getLastTradePrice);
assertEquals(1, soapBody.getChildNodes().getLength());
Iterator iter = soapBody.getChildElements();
assertTrue(iter.hasNext());
Object obj = iter.next();
// must be SOAPBodyElement
assertTrue(obj instanceof SOAPBodyElement);
SOAPElement soapElement = (SOAPElement)obj;
assertEquals(namespace, soapElement.getNamespaceURI());
assertEquals(localName, soapElement.getLocalName());
assertFalse(iter.hasNext());
iter = soapElement.getChildElements();
assertTrue(iter.hasNext());
obj = iter.next();
assertTrue(obj instanceof SOAPElement);
soapElement = (SOAPElement)obj;
assertEquals(null, soapElement.getNamespaceURI());
assertEquals("symbol", soapElement.getLocalName());
assertFalse(iter.hasNext());
iter = soapElement.getChildElements();
assertTrue(iter.hasNext());
obj = iter.next();
assertTrue(obj instanceof Text);
Text text = (Text)obj;
assertEquals("DEF", text.getData());
assertFalse(iter.hasNext());
}
}