xfire webservice
首先这里需要一些jar包
客户端:
服务器端的jar包没有红色圈起来的包 其他都一样
客户端如果少了这个包会报错->xfire Caused by: java.lang.ClassNotFoundException: org.apache.ws.commons.sch
下面介绍一下这个测试demo
step1:编写服务端的接口以及还实现类:
接口:
public interface IAccount {
public int account(int x,int y);
}
实现类:
public class ACCountImpl implements IAccount{
public int account(int x, int y) {
return x*y;
}
}
step2:web.xml中加入如下代码(如果和spring整合这里的class就不是这个了);
<servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
step3:
在meta-inf下面添加services.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<!-- webserviceq名称,调用时需要指定这个 -->
<name>MyService</name>
<!-- 接口类 -->
<serviceClass>com.IAccount</serviceClass>
<!-- 实现类 -->
<implementationClass>Impl.ACCountImpl</implementationClass>
</service>
</beans>
然后:访问http://localhost:8080/mywebserviceTest/MyService?wsdl
就可以看到相关的wsdl文件
客户端:
public class MyClient {
public static void main(String args[]) throws Exception {
//需要客户端引入接口字节码
/* Service service=new ObjectServiceFactory().create(IAccount.class);
XFireProxyFactory factory=new XFireProxyFactory(XFireFactory.newInstance().getXFire());
String url="http://localhost:8080/MyWebServiceTest/services/MyService";
IAccount ia = null;
try {
ia = (IAccount)factory.create(service,url);
} catch (MalformedURLException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
System.out.println(ia.account(2,2));
System.out.println("sdf");*/
//不需要客户端引入字节码
Client client = new Client(new URL("http://localhost:8080/MyWebServiceTest/services/MyService?wsdl"));
Object[] results11 = client.invoke("account", new Object[]{2,2});
System.out.println(results11[0]);
}
}
注释掉的那部分是需要引入服务端接口的字节码jar包才可以调用的:
没有注释掉的方式 是可以直接访问的