package com.teiid.quickstart.ws;
import static org.junit.Assert.assertNotNull;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Properties;
import javax.resource.ResourceException;
import javax.xml.transform.stax.StAXSource;
import javax.xml.ws.Dispatch;
import org.junit.Test;
import org.mockito.Mockito;
import org.teiid.adminapi.impl.ModelMetaData;
import org.teiid.adminapi.impl.SourceMappingMetadata;
import org.teiid.cdk.CommandBuilder;
import org.teiid.deployers.VirtualDatabaseException;
import org.teiid.dqp.internal.datamgr.ConnectorManagerRepository.ConnectorManagerException;
import org.teiid.dqp.internal.datamgr.RuntimeMetadataImpl;
import org.teiid.language.Call;
import org.teiid.metadata.MetadataFactory;
import org.teiid.metadata.Procedure;
import org.teiid.query.metadata.SystemMetadata;
import org.teiid.query.metadata.TransformationMetadata;
import org.teiid.query.unittest.RealMetadataFactory;
import org.teiid.resource.adapter.ws.WSManagedConnectionFactory;
import org.teiid.runtime.EmbeddedConfiguration;
import org.teiid.runtime.EmbeddedServer;
import org.teiid.translator.ExecutionContext;
import org.teiid.translator.TranslatorException;
import org.teiid.translator.WSConnection;
import org.teiid.translator.ws.WSExecutionFactory;
import org.teiid.translator.ws.WSWSDLProcedureExecution;
public class TestWebServiceDataSource {
static final String WSDL = "http://www.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL" ;
static final String ENDPORTNAME = "CountryInfoServiceSoap" ;
static final String NAMESPACEURI = "http://www.oorsprong.org/websamples.countryinfo";
static final String SERVICE = "CountryInfoService";
static EmbeddedServer server = null;
static Connection conn = null;
@Test
public void testExecution() throws ResourceException, TranslatorException {
server = new EmbeddedServer();
WSExecutionFactory executionFactory = new WSExecutionFactory();
executionFactory.start();
server.addTranslator("translator-ws", executionFactory);
WSManagedConnectionFactory managedconnectionFactory = new WSManagedConnectionFactory();
managedconnectionFactory.setEndPoint(ENDPORTNAME);
managedconnectionFactory.setNamespaceUri(NAMESPACEURI);
managedconnectionFactory.setServiceName(SERVICE);
managedconnectionFactory.setWsdl(WSDL);
server.addConnectionFactory("java:/CustomerWebSvcSource", managedconnectionFactory.createConnectionFactory());
WSConnection connection = executionFactory.getConnection(managedconnectionFactory.createConnectionFactory(), null);
Properties props = new Properties();
MetadataFactory metadataFactory = new MetadataFactory("testvdb", 1, "x", SystemMetadata.getInstance().getRuntimeTypeMap(), props, null);
executionFactory.getMetadata(metadataFactory, connection);
for(Iterator<String> iterator = metadataFactory.getSchema().getProcedures().keySet().iterator(); iterator.hasNext();) {
String key = iterator.next() ;
System.out.println(key + " -> " + metadataFactory.getSchema().getProcedures().get(key));
}
Procedure procedure = metadataFactory.getSchema().getProcedures().get("GetAllStateInfo");
TransformationMetadata tm = RealMetadataFactory.createTransformationMetadata(metadataFactory.asMetadataStore(), "testvdb");
RuntimeMetadataImpl rm = new RuntimeMetadataImpl(tm);
CommandBuilder cb = new CommandBuilder(tm);
Call call = (Call)cb.getCommand("call GetAllStateInfo()");
WSWSDLProcedureExecution wpe = new WSWSDLProcedureExecution(call, rm, Mockito.mock(ExecutionContext.class), executionFactory, connection);
wpe.execute();
wpe.getOutputParameterValues();
}
@Test
public void testWebserviceInvoke() throws TranslatorException, ResourceException, IOException {
server = new EmbeddedServer();
WSExecutionFactory executionFactory = new WSExecutionFactory();
executionFactory.start();
server.addTranslator("translator-ws", executionFactory);
WSManagedConnectionFactory managedconnectionFactory = new WSManagedConnectionFactory();
managedconnectionFactory.setEndPointName(ENDPORTNAME);
managedconnectionFactory.setNamespaceUri(NAMESPACEURI);
managedconnectionFactory.setServiceName(SERVICE);
managedconnectionFactory.setWsdl(WSDL);
server.addConnectionFactory("java:/CustomerWebSvcSource", managedconnectionFactory.createConnectionFactory());
WSConnection connection = executionFactory.getConnection(managedconnectionFactory.createConnectionFactory(), null);
Dispatch<StAXSource> dispatch = connection.createDispatch(StAXSource.class, executionFactory.getDefaultServiceMode());
}
public void init() throws Exception {
server = new EmbeddedServer();
WSExecutionFactory executionFactory = new WSExecutionFactory();
executionFactory.start();
server.addTranslator("translator-ws", executionFactory);
WSManagedConnectionFactory managedconnectionFactory = new WSManagedConnectionFactory();
managedconnectionFactory.setEndPoint(WSDL);
managedconnectionFactory.setEndPointName(ENDPORTNAME);
managedconnectionFactory.setNamespaceUri(NAMESPACEURI);
managedconnectionFactory.setServiceName(SERVICE);
managedconnectionFactory.setWsdl(WSDL);
server.addConnectionFactory("java:/CustomerWebSvcSource", managedconnectionFactory.createConnectionFactory());
// WSConnection connection = executionFactory.getConnection(managedconnectionFactory.createConnectionFactory(), null);
server.start(new EmbeddedConfiguration());
server.deployVDB(new FileInputStream(new File("src/vdb/webservice-vdb.xml")));
conn = server.getDriver().connect("jdbc:teiid:CountryInfoServiceVDB", null);
System.out.println(conn);
}
public static void main(String[] args) throws Exception {
new TestWebServiceDataSource().init();
}
}