WebService(一)

webservice 服务端配置其实很简单 主要是services.xml文件的配置

Eclipse 创建XFire项目的时候要注意不要忘了选择http client ,特别是在客户端里调用的时候

如果没http client 会报错。

提供者 server  调用者client

server  有完整的接口和实现,而client只需要要由其相应的接口即可,而且interface 名字可以不同,但是method名字一定要相同。

验证:

查看wsdl:注意chrome不能查看wsdl的信息,chrome是默认不显示这些的,我们通过审查元素可以在chrome查看到wsdl。

server段只需要配置好services.xml 就OK啦。主要看Client,Client调用可以通过两种方式调用。

1 自己写Client调用

 

    //1.取得WebService的路径 
    String url = "http://localhost:8080/testWebService/services/testWebService"; 
    //2.创建服务 
    Service service = new ObjectServiceFactory().create(Sv.class); 
    //3.创建服务代理 
    XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 
     //4.调用外部的WebService,建立对象,再测试其方法 
     try { 
    	 Sv obj = (Sv)factory.create(service,url); 
         System.out.println(obj.HelloWorld("Smith")); 
     } catch (MalformedURLException e) { 
         e.printStackTrace(); 
     } 

 2 生成代码

在客户端项目里面File-->New-->Code generation from wsdl document.

输入服务的wsdl和该Client项目,然后选择要防止的包,Finish。(注意这部操作的时候必须把Service项目用web服务器打开,然后把生成的代码复制到SRC下,删除webroot的)

调用如下:

 

testWebServiceClient client = new testWebServiceClient ();
testWebServicePortType service = client.gettestWebServiceHttpPort();
System.out.println(service.helloWorld("Smith"));

第三种调用方式:

		client = new Client(new  URL("http://localhost:8080/testWebService/services/testWebService?wsdl"));
		Object[] results = client.invoke("HelloWorld", new Object[] {"yezhu"}); 
	    System.out.println((String) results[0]); 

  XFire安全验证:

出啦防火墙等外面的拦截,XFire也提供了对安全性的验证。

Server端配置:

1:验证 AuthenticationHandler extends AbstractHandler

2: services.xml 为需要安全验证的<bean>加上

 

 

<inHandlers> 
   	<handler handlerClass ="com.xxx.AuthenticationHandler" >
</handler > 
</inHandlers>
<style>wrapped</style>
<use>literal</use>
<scope>application</scope>
 

Client

1: public class ClientAuthenticationHandler extends AbstractHandler 

2:测试

 

Service serviceModel = new ObjectServiceFactory().create(Sv.class);
 Sv service = (Sv) new XFireProxyFactory().create(serviceModel,
		        "http://localhost:8080/testWebService/services/testWebService");   
 XFireProxy proxy = (XFireProxy)Proxy.getInvocationHandler(service);
 Client client = proxy.getClient();
 //发送授权信息
client.addOutHandler(new ClientAuthenticationHandler("用户名","密码"));
 //输出调用web services方法的返回信息
System.out.println(service.dosomething("john  "));
 

如果请求需要验证的话,生成的代码 wsdl2java

 

Service serviceModel = new ObjectServiceFactory().create(sayhelloPortType.class);
 sayhelloPortType service = (sayhelloPortType) new XFireProxyFactory().create((org.codehaus.xfire.service.Service) serviceModel,"http://localhost:8080/WebServiceServer/services/sayhello");   
 XFireProxy proxy = (XFireProxy)Proxy.getInvocationHandler(service);
  Client client = proxy.getClient();
  //发送授权信息
    client.addOutHandler(new ClientAuthenticationHandler("abcd","1234"));
  //输出调用web services方法的返回信息
 System.out.println(service.sayHello("jim"));

  服务端获得客户端的一些信息这个可以写在AuthenticationHandler,用户每次访问的时候都可以验证IP,同时也可以验证用户名和密 码

 

String remoteip= XFireServletController.getRequest().getRemoteAddr();
String uri = cfx.getInMessage().getUri();
System.out.println("服务端得到客户端的ip为:" + remoteip + "  URI为:" + uri);
   
 

 

你可能感兴趣的:(webservice)