package org.teiid.embedded.samples.ws; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.File; import java.io.FileInputStream; import java.sql.CallableStatement; import java.util.ArrayList; import java.util.List; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.transform.stax.StAXSource; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.teiid.core.types.SQLXMLImpl; import org.teiid.embedded.samples.TestBase; import org.teiid.embedded.samples.util.JDBCUtil; import org.teiid.resource.adapter.ws.WSManagedConnectionFactory; import org.teiid.translator.ws.WSExecutionFactory; import org.teiid.util.StAXSQLXML; @Ignore("Need SOAPService Running") public class TestWebServiceDataSource extends TestBase { static final String GET_ALL = "<GetAllStateInfo xmlns=\"http://www.teiid.org/stateService/\"/>"; static final String GET_ONE = "<GetStateInfo xmlns=\"http://www.teiid.org/stateService/\"><stateCode xmlns=\"\">CA</stateCode></GetStateInfo>"; @BeforeClass public static void init() throws Exception { init("translator-ws", new WSExecutionFactory()); WSManagedConnectionFactory managedconnectionFactory = new WSManagedConnectionFactory(); server.addConnectionFactory("java:/StateServiceWebSvcSource", managedconnectionFactory.createConnectionFactory()); start(false); server.deployVDB(new FileInputStream(new File("vdb/webservice-vdb.xml"))); conn = server.getDriver().connect("jdbc:teiid:StateServiceVDB", null); } @Test public void testQuery() throws Exception { assertNotNull(conn); CallableStatement cStmt = conn.prepareCall("{call invoke(?, ?, ?, ?, ?)}"); cStmt.setString(1, "SOAP11"); cStmt.setString(2, ""); cStmt.setObject(3, getSQLXML(GET_ALL)); cStmt.setString(4, "http://localhost:8080/StateService/stateService/StateServiceImpl?WSDL"); cStmt.setBoolean(5, Boolean.TRUE); cStmt.execute(); StAXSQLXML xml = (StAXSQLXML) cStmt.getObject(1); List<String> namelist = getResult(xml.getSource(StAXSource.class).getXMLStreamReader()); assertEquals(50, namelist.size()); cStmt = conn.prepareCall("{call invoke(?, ?, ?, ?, ?)}"); cStmt.setString(1, "SOAP11"); cStmt.setString(2, ""); cStmt.setObject(3, getSQLXML(GET_ONE)); cStmt.setString(4, "http://localhost:8080/StateService/stateService/StateServiceImpl?WSDL"); cStmt.setBoolean(5, Boolean.TRUE); cStmt.execute(); xml = (StAXSQLXML) cStmt.getObject(1); namelist = getResult(xml.getSource(StAXSource.class).getXMLStreamReader()); assertEquals("California", namelist.get(0)); JDBCUtil.close(null, cStmt); } private List<String> getResult(XMLStreamReader reader) throws XMLStreamException { List<String> stateNames = new ArrayList<String>(); while (true) { if (reader.getEventType() == XMLStreamConstants.END_DOCUMENT) { break; } if (reader.getEventType() == XMLStreamConstants.START_ELEMENT) { String cursor = reader.getLocalName(); if (cursor.equals("Name")) { reader.next(); String value = reader.getText(); stateNames.add(value); } // if (cursor.equals("Abbreviation")) { // reader.next(); // String value = reader.getText(); // System.out.print(value + " "); // } // if (cursor.equals("Capital")) { // reader.next(); // String value = reader.getText(); // System.out.print(value + " "); // } // if (cursor.equals("YearOfStatehood")) { // reader.next(); // String value = reader.getText(); // System.out.println(value + " "); // } } reader.next(); } return stateNames; } private Object getSQLXML(String request) { return new SQLXMLImpl(request); } }