| /* |
| * 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()); |
| } |
| |
| } |