/* | |
* Copyright 2004,2005 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.axis2.databinding; | |
import org.apache.axiom.om.OMAbstractFactory; | |
import org.apache.axiom.om.OMElement; | |
import org.apache.axiom.om.impl.dom.DOOMAbstractFactory; | |
import org.apache.axiom.om.util.StAXUtils; | |
import org.apache.axiom.soap.SOAP11Constants; | |
import org.apache.axiom.soap.SOAPEnvelope; | |
import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder; | |
import org.apache.axis2.databinding.utils.PrintEvents; | |
import org.apache.axis2.databinding.utils.reader.ADBXMLStreamReaderImpl; | |
import org.custommonkey.xmlunit.XMLTestCase; | |
import org.w3c.dom.Document; | |
import org.xml.sax.SAXException; | |
import javax.xml.namespace.QName; | |
import javax.xml.parsers.DocumentBuilder; | |
import javax.xml.parsers.DocumentBuilderFactory; | |
import javax.xml.parsers.ParserConfigurationException; | |
import javax.xml.stream.XMLStreamReader; | |
import java.io.ByteArrayInputStream; | |
import java.io.IOException; | |
import java.io.StringReader; | |
import java.io.StringWriter; | |
import java.util.ArrayList; | |
public class ADBSOAPModelBuilderTest extends XMLTestCase { | |
public void testSimpleArrayList() throws Exception { | |
String expectedXML = "<?xml version='1.0' encoding='utf-8'?>" + | |
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" + | |
"<soapenv:Header />" + | |
"<soapenv:Body>" + | |
"<Person xmlns=\"\">" + | |
"<Name xmlns=\"\">FooOne</Name>" + | |
"<DependentOne xmlns=\"\"><Name xmlns=\"\">FooTwo</Name>" + | |
"<Age xmlns=\"\">25</Age>" + | |
"<Sex xmlns=\"\">Male</Sex></DependentOne>" + | |
"<DependentTwo xmlns=\"\">" + | |
"<Name xmlns=\"\">FooTwo</Name>" + | |
"<Age xmlns=\"\">25</Age>" + | |
"<Sex xmlns=\"\">Male</Sex></DependentTwo>" + | |
"<Organization xmlns=\"\">Apache</Organization>" + | |
"</Person></soapenv:Body></soapenv:Envelope>"; | |
ArrayList propertyList = new ArrayList(); | |
propertyList.add("Name"); | |
propertyList.add("FooOne"); | |
propertyList.add(new QName("DependentOne")); | |
propertyList.add(new DummyADBBean()); | |
propertyList.add(new QName("DependentTwo")); | |
propertyList.add(new DummyADBBean()); | |
propertyList.add("Organization"); | |
propertyList.add("Apache"); | |
QName projectQName = new QName("Person"); | |
XMLStreamReader pullParser =new ADBXMLStreamReaderImpl(projectQName, propertyList.toArray(), null); | |
ADBSOAPModelBuilder builder = new ADBSOAPModelBuilder( | |
pullParser, OMAbstractFactory.getSOAP11Factory()); | |
OMElement root = builder.getDocumentElement(); | |
assertTrue("Root element can not be null", root != null); | |
Document expectedDOM = newDocument(expectedXML); | |
Document actualDom = newDocument(root.toString()); | |
assertXMLEqual(actualDom, expectedDOM); | |
} | |
public void testPrintEvents() throws Exception { | |
XMLStreamReader r = getTestEnvelope().getXMLStreamReader(); | |
PrintEvents.print(r); | |
} | |
public void testPrintEvents2() throws Exception { | |
//TODO: FIXME. Check the output difference between this method and the testPrintEvents method | |
XMLStreamReader r = getTestEnvelope().getXMLStreamReaderWithoutCaching(); | |
PrintEvents.print(r); | |
} | |
public void testConvertToDOOM() throws Exception { | |
String xml = "<?xml version='1.0' encoding='utf-8'?>" + | |
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" + | |
"<soapenv:Header /><soapenv:Body><ns1:createAccountRequest xmlns:ns1=\"http://www.wso2.com/types\">" + | |
"<clientinfo xmlns=\"http://www.wso2.com/types\"><name>bob</name><ssn>123456789</ssn></clientinfo>" + | |
"<password xmlns=\"\">passwd</password></ns1:createAccountRequest></soapenv:Body></soapenv:Envelope>"; | |
StAXSOAPModelBuilder builder2 = new StAXSOAPModelBuilder( | |
getTestEnvelope().getXMLStreamReader(), | |
DOOMAbstractFactory.getSOAP11Factory(), | |
SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI); | |
SOAPEnvelope envelope = builder2.getSOAPEnvelope(); | |
envelope.build(); | |
StringWriter writer = new StringWriter(); | |
envelope.serialize(writer); | |
writer.flush(); | |
String s2 = writer.toString(); | |
assertXMLEqual(s2,xml); | |
} | |
private SOAPEnvelope getTestEnvelope() { | |
CreateAccountRequest request = new CreateAccountRequest(); | |
ClientInfo clientInfo = new ClientInfo(); | |
clientInfo.setName("bob"); | |
clientInfo.setSsn("123456789"); | |
request.setClientInfo(clientInfo); | |
request.setPassword("passwd"); | |
ADBSOAPModelBuilder builder = new ADBSOAPModelBuilder(request | |
.getPullParser(CreateAccountRequest.MY_QNAME), | |
OMAbstractFactory.getSOAP11Factory()); | |
return builder.getEnvelope(); | |
} | |
public void testConvertToDOOM2() throws Exception { | |
String xml = "<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Header /><soapenv:Body><ns1:createAccountRequest xmlns:ns1=\"http://www.wso2.com/types\"><ns1:clientinfo><name xmlns=\"\">bob</name><ssn xmlns=\"\">123456789</ssn></ns1:clientinfo><password xmlns=\"\">passwd</password></ns1:createAccountRequest></soapenv:Body></soapenv:Envelope>"; | |
CreateAccountRequest request = new CreateAccountRequest(); | |
ClientInfo clientInfo = new ClientInfo(); | |
clientInfo.setName("bob"); | |
clientInfo.setSsn("123456789"); | |
request.setClientInfo(clientInfo); | |
request.setPassword("passwd"); | |
ADBSOAPModelBuilder builder = new ADBSOAPModelBuilder(request | |
.getPullParser(CreateAccountRequest.MY_QNAME), | |
OMAbstractFactory.getSOAP11Factory()); | |
SOAPEnvelope env = builder.getEnvelope(); | |
StAXSOAPModelBuilder builder2 = new StAXSOAPModelBuilder(getTestEnvelope().getXMLStreamReaderWithoutCaching(), DOOMAbstractFactory.getSOAP11Factory(), SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI); | |
SOAPEnvelope envelope = builder2.getSOAPEnvelope(); | |
envelope.build(); | |
StringWriter writer = new StringWriter(); | |
envelope.serialize(writer); | |
writer.flush(); | |
XMLStreamReader r = StAXUtils.createXMLStreamReader(new StringReader(writer.toString())); | |
PrintEvents.print(r); | |
//TODO: FIXME. Simpler test in testPrintEvents2 | |
//assertXMLEqual(writer.toString(),xml); | |
} | |
public class DummyADBBean implements ADBBean { | |
ArrayList propertyList = new ArrayList(); | |
public DummyADBBean() { | |
propertyList.add("Name"); | |
propertyList.add("FooTwo"); | |
propertyList.add("Age"); | |
propertyList.add("25"); | |
propertyList.add("Sex"); | |
propertyList.add("Male"); | |
} | |
public DummyADBBean addAnotherBean() { | |
propertyList.add(new QName("Depemdent")); | |
DummyADBBean dummyBean = new DummyADBBean(); | |
propertyList.add(dummyBean); | |
return dummyBean; | |
} | |
public XMLStreamReader getPullParser(QName adbBeanQName) { | |
return new ADBXMLStreamReaderImpl(adbBeanQName, propertyList.toArray(), null); | |
} | |
} | |
public Document newDocument(String xml) | |
throws ParserConfigurationException, SAXException, IOException { | |
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); | |
dbf.setNamespaceAware(true); | |
DocumentBuilder db = dbf.newDocumentBuilder(); | |
return db.parse(new ByteArrayInputStream(xml.getBytes())); | |
} | |
} |