1. 安装Jboss
2. 将webservice endpoint当成servlet
3. 写一个远端的interface
4. 在eclipse中配置一个external tool:wscompile
4. 写一个config.xml, 然后用JWSDP的JAXRPC中的wscompile生成mapping.xml和wsdl
5. 必须存在4个文件:web.xml,webservices.xml,mapping.xml和.wsdl
6. webservices 中的port name 要和.wsdl中的一致
7. 使用lomboz或jbossIDE deploy
详细实例:
1. create a class
package service;
public class Hello {
public boolean helloDancy(String hello){
System.out.println(hello);
return true;
}
}
2. create corresponding remote interface
package remote;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloRemote extends Remote {
public boolean helloDancy(String hello) throws RemoteException;
}
3. create web.xml in WEB-INF folder
< ?xml version="1.0" encoding="UTF-8"? >
< web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >
< servlet >
< servlet-name >helloServlet< /servlet-name >
< servlet-class >service.Hello< /servlet-class >
< /servlet >
< servlet-mapping >
< servlet-name >helloServlet< /servlet-name >
< url-pattern >/hello< /url-pattern >
< /servlet-mapping >
< /web-app >
4. create config.xml
< ?xml version="1.0" encoding="UTF-8"? >
< configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config" >
< service name="helloservice"
targetNamespace="/hello"
typeNamespace="/hello/types"
packageName="service" >
< interface name="remote.HelloRemote" / >
< /service >
< /configuration >
5. create folder wsdl in WEB-INF/ and run wscompile from jaxrpc folder in sun's jwsdp1.5 package
wscompile -cp output/classes -gen:server -f:documentliteral -mapping jaxrpc-mapping.xml -keep config.xml
-keep: keep the generated source file
6. After executing wscompile.bat, a mapping.xml and helloservice.wsdl are generated
7. create webservice.xml
< ?xml version="1.0" encoding="UTF-8"? >
< webservices xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://www.ibm.com/webservices/xsd/j2ee_web_services_1_1.xsd" version="1.1" >
< webservice-description >
< webservice-description-name >hello world< /webservice-description-name >
< wsdl-file >WEB-INF/wsdl/helloservice.wsdl< /wsdl-file >
< jaxrpc-mapping-file >WEB-INF/mapping.xml< /jaxrpc-mapping-file >
< port-component >
< port-component-name >hello-dancy< /port-component-name >
< wsdl-port >HelloRemotePort< /wsdl-port >
< service-endpoint-interface >remote.HelloRemote< /service-endpoint-interface >
< service-impl-bean >
< servlet-link >helloServlet< /servlet-link >
< /service-impl-bean >
< /port-component >
< /webservice-description >
< /webservices >
8. create hello.war and deploy it to jboss4.0.1
9. create test client
public void testHelloDancy() {
try{
String urlstr = "http://w20251-01:8080/hellows/hello?wsdl";
java.net.URL url = new java.net.URL(urlstr);
String ns = "/hello";
QName qname = new QName(ns, "Helloservice");
QName port = new QName(ns, "HelloRemotePort");
QName operation = new QName(ns, "helloDancy");
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress( url );
call.setOperationName( operation );
call.addParameter( "String_1", XMLType.XSD_BASE64, ParameterMode.IN);
call.setReturnType( XMLType.XSD_BOOLEAN);
Boolean ret = (Boolean)call.invoke(new Object[]{"hello, Dancy".getBytes()});
} catch(Exception e){
e.printStackTrace();
}
}
10. set the classpath to lead to jars in axis's lib folder
11. customized object which involve byte[] as the input parameter
client code:
public void testHelloDancy() {
try{
String urlstr = "http://w20251-01:8080/hellows/hello?wsdl";
java.net.URL url = new java.net.URL(urlstr);
String ns = "/hello";
QName qname = new QName(ns, "Helloservice");
QName port = new QName(ns, "HelloRemotePort");
QName operation = new QName(ns, "helloDancy");
Service service = new Service();
Call call = (Call)service.createCall();
QName qn = new QName( "/hello/types", "Dto" ); //refer to .wsdd
call.registerTypeMapping(service.Dto.class, qn,
new org.apache.axis.encoding.ser.BeanSerializerFactory(service.Dto.class, qn),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(service.Dto.class, qn));
call.setTargetEndpointAddress( url );
call.setOperationName( operation );
call.addParameter( "arg0", qn, ParameterMode.IN);
call.setReturnType( XMLType.XSD_BOOLEAN);
service.Dto dto = new Dto();
dto.setParam("hello, Dancy".getBytes());
Boolean ret = (Boolean)call.invoke(new Object[]{dto});
} catch(Exception e){
e.printStackTrace();
}