AXIS第一课:最简单的AXIS发布webservice
?????? Service service = new Service(); //创建一个Service实例,注意是必须的!
?????? Call???? call??? = (Call) service.createCall();//创建Call实例,也是必须的!
???? call.setTargetEndpointAddress( new java.net.URL(endpoint) );//为Call设置服务的位置
??????? call.setOperationName( "sayHello" );//注意方法名与HelloWorld.java中一样!!
???????? String res = (String) call.invoke( new Object[] {} );//返回String,没有传入参数
???????????????????????? System.out.println( res );
?? }
}
注意项目中要导入其自带的AXIS包(当然应该把其中JAR文件替换一下),可以看到程序返回了 "HELLO WORLD!"
可以看到在AXIS里发布服务其实是一件很容易的事,这是因为这个服务很简单的原因。
2,Dynamic Proxy动态代理方式
1、将HelloWorld.java编译成HelloWorld.class,放到%TOMCAT_HOME%\webapps\axis\WEB-INF\classes
????? 下
2、在%TOMCAT_HOME%\webapps\axis\WEB-INF下新建deploy.wsdd文件,即SOAP服务发布描述文件
???? deploy.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
??? <service name="HelloWorld" provider="java:RPC">
??????? <parameter name="className" value="HelloWorld"/>
??????? <parameter name="allowedMethods" value="sayHello"/>
??? </service>
</deployment>
在DOS下转换目录到%TOMCAT_HOME%\webapps\axis\WEB-INF,命令:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
你会发现目录下多了一个server-config.wsdd文件,这就是AXIS的配置文件,以后所有的服务发布描述都会在里面找到。(当然,你可以直接修改它,不用再写deploy.wsdd)然后打开浏览器http://localhost:8080/axis/servlet/AxisServlet,你就会看到你的服务已发布
同样用客户端程序访问一下:(注意和上边的差别!!)
HelloClient.java
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class HelloClient
{
?? public static void main(String [] args) throws Exception {
?????? String endpoint = "http://localhost:" +"8080"+ "/axis/services/HelloWorld";//注意!差别仅仅在这里!!
?????? Service service = new Service();
?????? Call???? call??? = (Call) service.createCall();
?????? call.setTargetEndpointAddress( new java.net.URL(endpoint) );
??????? call.setOperationName("sayHello" );
???????? String res = (String) call.invoke( new Object[] {} );
???????????????????????? System.out.println( res );
?? }
}
对于有自定义的参数的客户端调用方式如下:
String endpoint = "http://192.168.0.3/DataManager/services/User";
??? Service service= new Service();
??? Call call= (Call)service.createCall();?
??? call.setTargetEndpointAddress(new java.net.URL(endpoint));
??? call.setOperationName("addUser");??
//前面都一样,但是这里加了一段注册参数类型的说明,如果有多个自定义参数只需要要复制这段代码,
//再修改参数就行了。
??? QName qn = new QName("urn:beanservice", "User");
??? call.registerTypeMapping(User.class, qn,????
????? new BeanSerializerFactory(User.class, qn),????
????? new BeanDeserializerFactory(User.class, qn));
???????? User user = new User();
???????? user.setClass_("U");
???????? user.setName_("annlee");
???????? user.setEmail_("1@163.com");
???????? user.setSeq_(new Integer(65546));
???????? user.setPassword_("password");
???????? user.setEnabled_("Y");
???????? user.setDisplayname_("李飞虎");
???
??? String result=(String )call.invoke(new Object[]{user});
好了,相信你对AXIS已有了大致的了解。接下来将会涉及到Stub方式调用,及AXIS的安全问题,AOP编程方面的知识。