package tutorial.sample26;

import java.net.URL;

import javax.xml.soap.SOAPConstants;
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.Service;
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;

import javax.xml.namespace.QName;

import javax.xml.rpc.encoding.TypeMapping;
import javax.xml.rpc.encoding.TypeMappingRegistry;

import weblogic.webservice.encoding.DefaultTypeMapping;

public class Main{
  
  public static void main( String[] args ){
    try{
      new Main().invoke( args[0] );
    }catch( Exception e ){
      e.printStackTrace();
    }
  }

  private void invoke( String wsdlURL ) throws Exception{

    //set weblogic ServiceFactory
    System.setProperty( "javax.xml.rpc.ServiceFactory",
        "weblogic.webservice.core.rpc.ServiceFactoryImpl" );

    //create service factory
    ServiceFactory factory = ServiceFactory.newInstance();
  
    //define qnames
    String targetNamespace = "http://soapinterop.org/"; 

    QName serviceName = new QName( targetNamespace, "SimpleTest" );
    QName portName = new QName( targetNamespace, "SimpleTestSoap" );

    QName operationName = new QName( "http://soapinterop.org/", 
        "echoStruct" );

    //create service
    Service service = factory.createService( new URL( wsdlURL ), serviceName );

    TypeMappingRegistry registry = service.getTypeMappingRegistry(); 

    registry.registerDefault( 
        new DefaultTypeMapping( "/tutorial/sample26/types.xml" ) );

    //create call
    Call call = service.createCall();

    //set port and operation name
    call.setPortTypeName( portName );
    call.setOperationName( operationName );

    SOAPStruct s = new SOAPStruct();
    s.setVarInt(2);
    s.setVarString("foo");
    s.setVarFloat(123123);
    System.out.println(s.toString());

    SOAPStruct res = (SOAPStruct) call.invoke(new Object[]{s} );

    System.out.println( res );
  }

}


