Вы находитесь на странице: 1из 3

JAX-RPC Model

Introduction to JAXRPC
JAXRPC Client Service
Tie
Dynamic
Ye Wu Stub Proxy DLL Endpoint
http://www.ise.gmu.edu/~wuye
SOAP SOAP
SWE 645 HTTP HTTP
Component-based Software Development TCP/IP TCP/IP
sources: Java Web Service Architecture, James McGoven and etc.,
Morgan Kaufmann, Ch 4, 10, 11 (8 and 9 are supporting chapters)
INTERNET
2007-4-17 © Dr. Ye Wu 2

Axis Data Type and Serialization

• SOAP Engine (SOAP 1.1 compliant, partial SOAP 1.2) • RMI – Java Serialization
• a simple stand-alone server, • CORBA – IIOP
• a server which plugs into servlet engines such as Tomcat,
• DCOM – ORPC
• extensive support for the Web Service Description
Language (WSDL),
• emitter tooling that generates Java classes from WSDL. • Web service – How to perform marshalling and
• some sample programs, and unmarshalling?
• a tool for monitoring TCP/IP packets.

2007-4-17 © Dr. Ye Wu 3 2007-4-17 © Dr. Ye Wu 4

XML <-> Java Data Mapping in AXIS


Java-to-XML Marshalling
xsd:base64Bin byte[] xsd:hexBina byte[]
ary ry
• All Java primitives, with exception of a char.
xsd:boolean Boolean xsd:int Int
• An object that is an instance of
– Java.lang.String java.math.BigInteg
xsd:byte Byte xsd:integer
– Java.util.Date er
– Java.util.Calendar java.util.Cale
xsd:dateTime xsd:long long
– Java.math.BigInteger ndar
– Java.math.BigDecimal
java.math.Bi javax.xml.namespa
• An object that is an instance of a class that conforms to xsd:decimal gDecimal xsd:QName ce.QName
JavaBean specification. (Not remote objects
xsd:double Double xsd:short short
• An array
• A java.lang.Exception class xsd:float Float xsd:string java.lang.String
2007-4-17 © Dr. Ye Wu 5 2007-4-17 © Dr. Ye Wu 6

1
SOAP Binding and Encoding Develop SOAP Service with Axis

• Encoded message • Developing the Axis service


– Axis - RPC style service • Prepare the deployment descriptor (WSDD)
• Literal message • Deploy web service
– Axis - Document style service • Develop Client program
– Axis - Wrapped style service
– Axis - Message service

2007-4-17 © Dr. Ye Wu 7 2007-4-17 © Dr. Ye Wu 8

Developing the Axis service Prepare Deployment Descriptor

import java.util.*; <deployment xmlns="http://xml.apache.org/axis/wsdd/"


xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloWorld" provider="java:RPC">
public class HelloWorldService { <parameter name="className" value = "HelloWorldService"/>
public HelloWorldService() {} <parameter name="allowedMethods" value="*"/>
public String HelloWorld() { </service>
</deployment>
return "Hello World!";
}
}

2007-4-17 © Dr. Ye Wu 9 2007-4-17 © Dr. Ye Wu 10

Deploy Web Service Develop Web Service Client

• Copy java class file into $AXIS_HOME/WEB- String endpointURL="http://hermes:9090/axis/services/HelloWorld";


String methodName = "HelloWorld";
INF/classes directory
• Publishing service Service service = new Service();
Java org.apache.axis.client.AdminClient –p 9090 ?.wsdd Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpointURL));
• Verify the deployment at http://hermes.gmu.edu:9090/axis call.setOperationName(methodName);
call.addParameter( "name", XMLType.XSD_STRING,
ParameterMode.IN );
call.setReturnType(XMLType.XSD_STRING);
res = (String)call.invoke(new Object[]{"aa"});
System.out.println(res);
2007-4-17 © Dr. Ye Wu 11 2007-4-17 © Dr. Ye Wu 12

2
Advanced SOAP Programming BeanSerializer

• Passing Custom Type Input Parameters • Develop your JavaBean


– BeanMapping • User JavaBean as a parameter or return value
– TypeMapping
public String HelloWorld(Myclass myClass) {
• Adding Handlers
return "Hello World!" + myClass.getPname() + " " + myClass.getClassname();
• Scoped Service }
– <service name="MyService"...> <parameter
name="scope" value="value"/> ... </service> public Myclass(){};
void setClassname(String classname) { this.classname = classname;}
• Remote Administration (server-config.wsdd) void setPname(String pname) { this.pname = pname;}
<parameter name="enableRemoteAdmin" value="true"/> String getClassname() { return classname;}
String getPname() { return pname; }
}

2007-4-17 © Dr. Ye Wu 13 2007-4-17 © Dr. Ye Wu 14

Prepare Deployment Descriptor Develop Web Service Client

<deployment xmlns="http://xml.apache.org/axis/wsdd/" QName qn = new QName("urn:BeanS","Myclass");


xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> call.registerTypeMapping(Myclass.class, qn,
<service name="wuyeBeanS" style="java:RPC"> new org.apache.axis.encoding.ser.BeanSerializerFactory(Myclass.class, qn),
<parameter name="className" value = "BeanSHello"/> new org.apache.axis.encoding.ser.BeanDeserializerFactory(Myclass.class, qn));
<parameter name="allowedMethods" value="*"/> call.addParameter( "name", qn, ParameterMode.IN );
<beanMapping qname="myNS:Myclass" call.setReturnType(XMLType.XSD_STRING);
xmlns:myNS="urn:BeanS“ Myclass myClass = new Myclass();
languageSpecificType="java:Myclass"/> myClass.setClassname("aaa");
</service> myClass.setPname("bbb");
</deployment> String res = (String)call.invoke(new Object[]{myClass});

2007-4-17 © Dr. Ye Wu 15 2007-4-17 © Dr. Ye Wu 16

Potential Issues with SOAP Environment Setting

• Lack of interoperability between SOAP export AXIS_HOME=/opt/tomcat-swe645/webapps/axis


export CLASSPATH=$AXIS_HOME/lib/axis.jar:$CLASSPATH
implementations
export CLASSPATH=$AXIS_HOME/lib/jaxrpc.jar:$CLASSPATH
• Security mechanisms are immature export CLASSPATH=$AXIS_HOME/lib/saaj.jar:$CLASSPATH
• No guaranteed message delivery export CLASSPATH=$AXIS_HOME/lib/commons-
logging.jar:$CLASSPATH
• No publish and subscribe export CLASSPATH=$AXIS_HOME/lib/commons-
discovery.jar:$CLASSPATH
• Performance
export CLASSPATH=$AXIS_HOME/lib/wsdl4j.jar:$CLASSPATH

2007-4-17 © Dr. Ye Wu 17 2007-4-17 © Dr. Ye Wu 18

Вам также может понравиться