package org.teiid.embedded.samples.ws; 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.teiid.core.types.SQLXMLImpl; import org.teiid.embedded.samples.ExampleBase; 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; /** * 'StateServiceExample' depend on StateService, more details refer to * 1. https://github.com/kylinsoong/jaxws/tree/master/stateService * 2. http://ksoong.org/jaxws-stateservice/ * * @author kylin * */ public class StateServiceExample extends ExampleBase{ 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>"; @Override public void execute() 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); 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()); System.out.println(namelist); 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()); System.out.println(namelist); JDBCUtil.close(null, cStmt); tearDown(); } 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); } public static void main(String[] args) throws Exception { new StateServiceExample().execute(); } }