java调用webservice例子

[color=red][b]1. 编写实现类[/b][/color]
a. 首先建一个接口把对外开放的方法添加进该接口,实际上就是开放此接口让客户端获得

package com.test.service;

public class HelloXfireImpl implements HelloXfire {
public String sayHello(String str) {
return str + " this is xfire";
}
}

[color=red][b]2. 映射web.xml[/b][/color]
通过配置web.xml来映射相应的路径,在web.xml添加如下代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.5"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>


[color=red][b]3.services配置文件[/b][/color]
创建services文件
在src目录下创建META-INF目录,在该目录下创建一个xfire目录在该目录下创建services.xml
通过配置此文件来公开我们的接口,客户端可以通过此文件的映射可以找到相应的需要公开的接口

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">

<service>
<name>HelloXfire</name>
<serviceClass>com.test.service.HelloXfire</serviceClass>
<implementationClass>
com.test.service.HelloXfireImpl
</implementationClass>
<mce:style><!--wrapped--></mce:style>
<style mce_bogus="1">wrapped</style>
<use>literal</use>
<scope>application</scope>
</service></beans>

[color=red][b]获取wsdl文件的地址[/b][/color]

什么是wsdl?
参考: http://blog.csdn.net/sunchaohuang/archive/2008/10/14/3076375.aspx
[b][color=indigo]通过web.xml与services.xml对地址的映射我们可以获得如下地址并进行访问后就可
以得到wsdl文件的url了[/color][/b]
访问的地址:[b]http://localhost:9099/HelloXfire/services/HelloXfire?wsdl[/b]
访问后会得到一个类似xml格式的内容 该文件就是一个wsdl文件
[color=red][b]4.编写客户端[/b][/color]
客户端获得webservice的url地址后创建对外开放的接口的实体类,然后向相应的方法传递参数,经过服务端相应的处理返回需要的结果

package com.test.client;
import java.net.MalformedURLException;
import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
import com.test.service.HelloXfire;

public class HelloXfireClient {
/**
* @param args
*/
public static void main(String[] args) {
Service srvcModel = new ObjectServiceFactory().create(HelloXfire.class);
XFireProxyFactory factory = new XFireProxyFactory(XFireFactory
.newInstance().getXFire());
String helloWorldURL = "http://localhost:9099/HelloXfire/services/HelloXfire";
try {
HelloXfire srvc = (HelloXfire) factory.create(srvcModel,
helloWorldURL);
String result = srvc.sayHello("hello ");
System.out.print(result);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}


[b]-----------------------------------------------------------------------------------------------[/b]
[b]不同项目的webservice调用
一般情况下webservice的调用都是在不同的项目间或者不同的语言中来使用的
如果是不同的语言调用webservice应用:
客户端如果是其他语言,则通过得到服务端生成的wsdl或者或者wsdl文件的地址做相应的操作得到本语言具体的客户端实现类来调用服务端对外开放的方法
[color=red]如果是不同项目间的调用(java语言为例)在myeclipse下新建一个web service Client选择xfire下一步后选择wsdl的地址: http://localhost:9099/HelloXfire/services/HelloXfire?wsdl
完成后会自动生成相应的客户端类。
在HelloXfireClient类中调取服务端对外开放的接口方法获得相应数据.具体代码如下[/color][/b]
[b]-----------------------------------------------------------------------------------------------[/b]

package com.test.service;

import java.net.MalformedURLException;
import java.util.Collection;
import java.util.HashMap;
import javax.xml.namespace.QName;
import org.codehaus.xfire.XFireRuntimeException;
import org.codehaus.xfire.aegis.AegisBindingProvider;
import org.codehaus.xfire.annotations.AnnotationServiceFactory;
import org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.jaxb2.JaxbTypeRegistry;
import org.codehaus.xfire.service.Endpoint;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.soap.AbstractSoapBinding;
import org.codehaus.xfire.transport.TransportManager;

public class HelloXfireClient {

private static XFireProxyFactory proxyFactory = new XFireProxyFactory();
private HashMap endpoints = new HashMap();
private Service service0;

public HelloXfireClient() {
create0();
Endpoint HelloXfirePortTypeLocalEndpointEP = service0 .addEndpoint(new QName("http://service.test.com", "HelloXfirePortTypeLocalEndpoint"), new QName("http://service.test.com", "HelloXfirePortTypeLocalBinding"), "xfire.local://HelloXfire");
endpoints.put(new QName("http://service.test.com", "HelloXfirePortTypeLocalEndpoint"), HelloXfirePortTypeLocalEndpointEP);
Endpoint HelloXfireHttpPortEP = service0 .addEndpoint(new QName("http://service.test.com", "HelloXfireHttpPort"), new QName("http://service.test.com", "HelloXfireHttpBinding"), "http://localhost:9099/HelloXfire/services/HelloXfire");
endpoints.put(new QName("http://service.test.com", "HelloXfireHttpPort"), HelloXfireHttpPortEP);
}

public Object getEndpoint(Endpoint endpoint) {
try {
return proxyFactory.create((endpoint).getBinding(), (endpoint).getUrl());
} catch (MalformedURLException e) {
throw new XFireRuntimeException("Invalid URL", e);
}
}

public Object getEndpoint(QName name) {
Endpoint endpoint = ((Endpoint) endpoints.get((name)));
if ((endpoint) == null) {
throw new IllegalStateException("No such endpoint!");
}
return getEndpoint((endpoint));
}

public Collection getEndpoints() {
return endpoints.values();
}

private void create0() {
TransportManager tm = (org.codehaus.xfire.XFireFactory.newInstance().getXFire().getTransportManager());
HashMap props = new HashMap();
props.put("annotations.allow.interface", true);
AnnotationServiceFactory asf = new AnnotationServiceFactory(new Jsr181WebAnnotations(), tm, new AegisBindingProvider(new JaxbTypeRegistry()));
asf.setBindingCreationEnabled(false);
service0 = asf.create((com.test.service.HelloXfirePortType.class), props);
{
AbstractSoapBinding soapBinding = asf.createSoap11Binding(service0, new QName("http://service.test.com", "HelloXfirePortTypeLocalBinding"), "urn:xfire:transport:local");
}
{
AbstractSoapBinding soapBinding = asf.createSoap11Binding(service0, new QName("http://service.test.com", "HelloXfireHttpBinding"), "http://schemas.xmlsoap.org/soap/http");
}
}
public HelloXfirePortType getHelloXfirePortTypeLocalEndpoint() {
return ((HelloXfirePortType)(this).getEndpoint(new QName("http://service.test.com", "HelloXfirePortTypeLocalEndpoint")));
}
public HelloXfirePortType getHelloXfirePortTypeLocalEndpoint(String url) {
HelloXfirePortType var = getHelloXfirePortTypeLocalEndpoint();
org.codehaus.xfire.client.Client.getInstance(var).setUrl(url);
return var;
}
public HelloXfirePortType getHelloXfireHttpPort() {
return ((HelloXfirePortType)(this).getEndpoint(new QName("http://service.test.com", "HelloXfireHttpPort")));
}
public HelloXfirePortType getHelloXfireHttpPort(String url) {
HelloXfirePortType var = getHelloXfireHttpPort();
org.codehaus.xfire.client.Client.getInstance(var).setUrl(url);
return var;
}
public static void main(String[] args) {
HelloXfireClient client = new HelloXfireClient();
//create a default service endpoint
HelloXfirePortType service = client.getHelloXfireHttpPort();
String string= service.sayHello("hello");
System.out.println(string);
//TODO: Add custom client code here
//
//service.yourServiceOperationHere();
System.out.println("test client completed");
System.exit(0);
}
}

如果能够成功运行并正确获得调用的方法返回的值说明webservice成功实现了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值