/* * 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.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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.Detail; import javax.xml.soap.SOAPConstants; import javax.xml.soap.SOAPElement; import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPFactory; import javax.xml.soap.SOAPFault; import java.util.Iterator; /** * */ @RunWith(SAAJTestRunner.class) public class SOAPFactoryTest extends Assert { private static final Log log = LogFactory.getLog(SOAPFactoryTest.class); @Validated @Test public void testCreateDetail() { try { SOAPFactory sf = SOAPFactory.newInstance(); if (sf == null) { fail("SOAPFactory was null"); } Detail d = sf.createDetail(); if (d == null) { fail("Detail was null"); } } catch (Exception e) { e.printStackTrace(); fail("Unexpected Exception " + e); } } @Validated @Test public void testCreateElement() { try { //SOAPFactory sf = SOAPFactory.newInstance(); SOAPFactory sf = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); if (sf == null) { fail("createElementTest4() could not create SOAPFactory object"); } //Create QName object with localName=MyName1,prefix=MyPrefix1, uri=MyUri1 QName name = new QName("MyUri1", "MyName1", "MyPrefix1"); SOAPElement se = sf.createElement(name); assertNotNull(se); name = se.getElementQName(); String localName = name.getLocalPart(); String prefix = name.getPrefix(); String uri = name.getNamespaceURI(); if (localName == null) { fail("localName is null (expected MyName1)"); } else if (!localName.equals("MyName1")) { fail("localName is wrong (expected MyName1)"); } else if (prefix == null) { fail("prefix is null (expected MyPrefix1)"); } else if (!prefix.equals("MyPrefix1")) { fail("prefix is wrong (expected MyPrefix1)"); } else if (uri == null) { fail("uri is null (expected MyUri1)"); } else if (!uri.equals("MyUri1")) { fail("uri is wrong (expected MyUri1)"); } } catch (Exception e) { fail(); } } @Validated @Test public void testCreateElement2() { try { SOAPFactory sf = SOAPFactory.newInstance(); //SOAPFactory sf = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); if (sf == null) { fail("could not create SOAPFactory object"); } log.info("Create a DOMElement"); DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dbfactory.newDocumentBuilder(); Document document = builder.newDocument(); Element de = document.createElementNS("http://MyNamespace.org/", "MyTag"); //Calling SOAPFactory.createElement(org.w3c.dom.Element) SOAPElement se = sf.createElement(de); if (!de.getNodeName().equals(se.getNodeName()) || !de.getNamespaceURI().equals( se.getNamespaceURI())) { //Node names are not equal fail("Got: <URI=" + se.getNamespaceURI() + ", PREFIX=" + se.getPrefix() + ", NAME=" + se.getNodeName() + ">" + "Expected: <URI=" + de.getNamespaceURI() + ", PREFIX=" + de.getPrefix() + ", NAME=" + de.getNodeName() + ">"); } } catch (Exception e) { fail("Exception: " + e); } } @Validated @Test public void testCreateElement3() { try { SOAPFactory factory = SOAPFactory.newInstance(); if (factory == null) { fail("createFaultTest1() could not create SOAPFactory object"); } SOAPFault sf = factory.createFault(); if (sf == null) { fail("createFault() returned null"); } else if (!(sf instanceof SOAPFault)) { fail("createFault() did not create a SOAPFault object"); } } catch (Exception e) { fail(); } } @Validated @Test public void testCreateElement4() { try { SOAPFactory sf = SOAPFactory.newInstance(); if (sf == null) { fail("createElementTest6() could not create SOAPFactory object"); } QName qname = new QName("http://MyNamespace.org/", "MyTag"); SOAPElement se1 = sf.createElement(qname); //Create second SOAPElement from first SOAPElement SOAPElement se2 = sf.createElement(se1); //commented to support jdk 1.4 build // if(!se1.isEqualNode(se2) && !se1.isSameNode(se2)) { // fail("The SOAPElement's are not equal and not the same (unexpected)"); // } if (!se1.getNodeName().equals(se2.getNodeName()) || !se1.getNamespaceURI().equals( se2.getNamespaceURI())) { fail("Got: <URI=" + se1.getNamespaceURI() + ", PREFIX=" + se1.getPrefix() + ", NAME=" + se1.getNodeName() + ">" + "Expected: <URI=" + se2.getNamespaceURI() + ", PREFIX=" + se2.getPrefix() + ", NAME=" + se2.getNodeName() + ">"); } } catch (Exception e) { fail(); } } @Validated @Test public void testCreateFault() { try { SOAPFactory factory = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); //SOAPFactory factory = SOAPFactory.newInstance(); SOAPFault sf = factory.createFault("This is the fault reason.", SOAPConstants.SOAP_RECEIVER_FAULT); assertNotNull(sf); assertTrue(sf instanceof SOAPFault); QName fc = sf.getFaultCodeAsQName(); //Expect FaultCode="+SOAPConstants.SOAP_RECEIVER_FAULT Iterator i = sf.getFaultReasonTexts(); if (i == null) { log.info("Call to getFaultReasonTexts() returned null iterator"); } String reason = ""; while (i.hasNext()) { reason += (String)i.next(); } assertNotNull(reason); assertTrue(reason.indexOf("This is the fault reason.") > -1); assertTrue(fc.equals(SOAPConstants.SOAP_RECEIVER_FAULT)); } catch (SOAPException e) { fail("Caught unexpected SOAPException"); } } // TODO: check why this fails with Sun's SAAJ implementation @Test public void testCreateFault1() { try { //SOAPFactory factory = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); SOAPFactory factory = SOAPFactory.newInstance(); SOAPFault sf = factory.createFault("This is the fault reason.", SOAPConstants.SOAP_RECEIVER_FAULT); assertNotNull(sf); QName fc = sf.getFaultCodeAsQName(); Iterator i = sf.getFaultReasonTexts(); String reason = ""; while (i.hasNext()) { reason += (String)i.next(); } log.info("Actual ReasonText=" + reason); assertNotNull(reason); assertTrue(reason.indexOf("This is the fault reason.") > -1); assertTrue(fc.equals(SOAPConstants.SOAP_RECEIVER_FAULT)); } catch (SOAPException e) { //Caught expected SOAPException } catch (Exception e) { fail("Exception: " + e); } } /** for soap 1.1 */ @Validated @Test public void testSOAPFaultException1() { try { SOAPFactory factory = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); SOAPFault fault = factory.createFault("This is the fault reason.", new QName("http://MyNamespaceURI.org/", "My Fault Code")); } catch (UnsupportedOperationException e) { //Caught expected UnsupportedOperationException } catch (SOAPException e) { //Caught expected SOAPException } catch (IllegalArgumentException e) { //Caught expected IllegalArgumentException } catch (Exception e) { fail("Exception: " + e); } } /** for soap 1.2 */ @Validated @Test public void testSOAPFaultException2() { try { SOAPFactory factory = SOAPFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); SOAPFault sf = factory.createFault("This is the fault reason.", new QName("http://MyNamespaceURI.org/", "My Fault Code")); fail("Did not throw expected SOAPException"); } catch (UnsupportedOperationException e) { //Caught expected UnsupportedOperationException } catch (SOAPException e) { //Caught expected SOAPException } catch (IllegalArgumentException e) { //Caught expected IllegalArgumentException } catch (Exception e) { fail("Exception: " + e); } } }