import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.NamespaceConstants;
import javax.xml.rpc.encoding.TypeMappingRegistry;
import javax.xml.rpc.encoding.TypeMapping;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.Detail;
import javax.xml.namespace.QName;
import java.util.Map;
import java.util.Iterator;
import com.fujitsu.interstage.soapx.encoding.ser.BeanSerializerFactory;
import com.fujitsu.interstage.soapx.encoding.ser.BeanDeserializerFactory;
public class SampleRpcCL3
{
public static void main( String[] args )
{
try {
String endpointURL = "http://localhost/issoapx/servlet/SoapxServlet";
String serviceURI = "urn:StructSample";
QName operationName = new QName( serviceURI, "opStruct1" );
//**(1)**
QName dataType = new QName( serviceURI, "Struct1" );
Service service = ServiceFactory.newInstance()
.createService(new QName( serviceURI, "StructSampleService" ));
Call call = service.createCall();
//**(2)**
TypeMappingRegistry tmr = service.getTypeMappingRegistry();
TypeMapping tm = tmr.createTypeMapping();
tm.register( Struct1.class, dataType,
new BeanSerializerFactory( Struct1.class, dataType ),
new BeanDeserializerFactory( Struct1.class, dataType ));
tmr.register( NamespaceConstants.NSURI_SOAP_ENCODING, tm );
call.setTargetEndpointAddress(endpointURL);
call.setOperationName(operationName);
call.addParameter( "arg1", dataType, ParameterMode.IN );
call.addParameter( "arg2", dataType, ParameterMode.IN );
call.addParameter( "arg3", dataType, ParameterMode.OUT );
call.setReturnType(dataType);
Struct1 arg1 = new Struct1(100,"aaaaaaaaaa");
Struct1 arg2 = new Struct1(200,"bbbbbbbbbb");
Object[] param = new Object[] {arg1, arg2};
System.out.println( "arg1.a = " + arg1.a );
System.out.println( "arg1.b = " + arg1.b );
System.out.println( "arg2.a = " + arg2.a );
System.out.println( "arg2.b = " + arg2.b );
Struct1 ret = (Struct1)call.invoke( param );
Map outParams = call.getOutputParams();
Struct1 arg3 = (Struct1)outParams.get("arg3");
System.out.println( "arg3.a = " + arg3.a );
System.out.println( "arg3.b = " + arg3.b );
System.out.println( "ret.a = " + ret.a );
System.out.println( "ret.b = " + ret.b );
} catch( javax.xml.rpc.ServiceException e ) {
e.printStackTrace();
if( e.getLinkedCause() != null ) {
e.getLinkedCause().printStackTrace();
}
} catch( javax.xml.rpc.soap.SOAPFaultException e ) {
e.printStackTrace();
System.out.println(" Code = " + e.getFaultCode());
System.out.println(" String = " + e.getFaultString());
System.out.println(" Actor = " + e.getFaultActor());
if( e.getDetail() != null ) {
Detail detail = e.getDetail();
Iterator it = detail.getDetailEntries();
if( it != null ) {
while(it.hasNext()) {
SOAPElement elm = (SOAPElement)it.next();
System.out.println(" Detail = " + elm);
}
}
}
} catch( javax.xml.rpc.JAXRPCException e ) {
e.printStackTrace();
if( e.getLinkedCause() != null ) {
e.getLinkedCause().printStackTrace();
}
} catch( java.rmi.RemoteException e ) {
e.printStackTrace();
if( e.detail != null ) {
e.detail.printStackTrace();
}
} catch( Throwable e ) {
e.printStackTrace();
}
}
} |