java webservice的其中一种用法

前两天用了点webservice部分,这里记一下,呵呵

1 首先服务器端(我这里是struts+spring环境,客户端在另一个工程)

和普通的类没什么区别,主要是要让它发布成webservice,可以通过?wsdl查看的

1.1需要一个接口和一个实现类,接口主要控制你要暴露的方法

public interface UserInfoInterface { 

public String[] getUser(String arg)throws Exception ; 

public String sayHello(String arg)throws Exception; 

} 


public class UserInfoImpl implements UserInfoInterface { 

private UserService userService;//注入需要的service,添加相应的get,set方法 
public String[] getUser(String arg)throws Exception{ 

String[] results = new String[3]; 
  if(!StringUtil.isBlank(arg)){ 

   //results[0] = userService.getUser(arg);可以放入string类型的任意数据 
   results[0] = userService.getUser(arg); 
   results[1] = userService.getUser(arg); 

   results[2] = userService.getUser(arg); 

  } 
  return results; 

} 
pubic String sayHello(String arg)throws Exception{ 

      return "hello,"+ arg;//最常见的,呵呵,这里主要用于测试接收的数据 

} 

} 

 



1.2配置文件

首先xml文件 ,添加

 <!-- webservice xfire配置开始 -->
 <servlet>   
       <servlet-name>xfire</servlet-name>   
       <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>   
    <servlet-mapping> 
       <servlet-name>xfire</servlet-name>
       <url-pattern>*.ws</url-pattern>
    </servlet-mapping>
 
 <servlet>
     <servlet-name>XFireServlet</servlet-name>
     <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
   </servlet>
    <servlet-mapping>
     <servlet-name>XFireServlet</servlet-name>
     <url-pattern>/services/*</url-pattern>
   </servlet-mapping>
   <!-- webservice xfire配置结束 -->

 
webservice相关配置文件,只要在web.xml配置当启动时候加载就可以

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
 <!-- 引入XFire预配置信息 -->
 <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
 
 <bean id="getUserInfo"
  class="com.crazycat.UserInfoImpl" singleton="true">
  <!-- 用户service -->
  <property name="userService">
   <ref bean="userService" />
  </property>
   </bean>
 
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
       <property name="urlMap">             
           <map>                 
              <entry key="/GetUserInfo.ws">                  
                  <ref bean="getUserInfo" />                 
              </entry>             
           </map>         
       </property>     
    </bean> 
    
    <!-- 使用XFire导出器 -->
    <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
       <!-- 引用xfire.xml中定义的工厂 -->
       <property name="serviceFactory" ref="xfire.serviceFactory" />
       <!-- 引用xfire.xml中的xfire实例 -->
       <property name="xfire" ref="xfire" />
    </bean>
    
 <bean id="GetDealStatisticInfoService"
  class="org.codehaus.xfire.spring.remoting.XFireExporter" parent="baseWebService">
<!--  <property name="xfire" ref="xfire" />-->
  <property name="serviceBean" ref="getUserInfo" />
  <property name="serviceClass" value="com.crazycat.UserInfoInterface" />
 </bean>
 
</beans>

 

好了,重启服务器,就可以发布了。访问http://IP:端口号/工程名/services/   就可以看到了

 

2 客户端

因为我的客户端在另一个工程,所以是用动态方式获取的,(网上有很多方式的,根据自己需要选择)

 

public class UserInfoClient {

 public List getUserInfo(String arg){

   List<String> resultsList = new ArrayList<String>();
  Client client = null;
  try{
   client =new Client("http://IP:端口号/工程名/services/" + "UserInfoInterface?wsdl"));  

 Object[] results = client.invoke("getUserInfo",new Object[] {arg});
   if(results.length > 0) {
    DocumentImpl doc = (DocumentImpl)results[0];
    Document document = DocumentHelper.parseText(doc.saveXML(null));
    List<Node> uids = document.selectNodes("//ns1:string");
    for(int j = 0;j< uids.size();j++){
     Node node = uids.get(j);
     resultsList.add(node.getText());
//     System.out.println(node.getText());
    }
      }
  }catch(MalformedURLException e){
   e.printStackTrace();
  }catch(Exception e){
   e.printStackTrace();
  }
  return resultsList;

}

 

}

 

我主要想说的是里面粉色的部分,处理返回的数据,对于返回String类型的,直接去results[0]就可以了,不用解析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值