Axis2 + SpringMVC实现webservice合成

Axis2主要是用来做webservice的,在和springmvc合成的过程分一下几部,
1、要下载,解压缩后会产生一个axis2.war。
2、将axis2.war 放到tomcat中启动tomcat的webapps中,启动tomcat,这时tomcat会解压axis2.war
3、将axis2下的axis2-web拷贝到项目的WebContent中,然后将axis2-->WEB-INF-->conf,lib,modules拷贝到项目的 WEB-INF下
4、在WEB-INF下创建services/xxxx/META-INF/services.xml

tomcat目录 项目中的结构



services.xml中相关内容

<?xmlversion="1.0"encoding="UTF-8"?> 
<serviceGroup>   
  <servicename="checkService">   
     <description>Web Service</description>   
     <!-- 通过ServiceObjectSupplier参数指定SpringServletContextObjectSupplier类来获得Spring的ApplicationContext对象 -->
     <parametername="ServiceObjectSupplier"locked="false">org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier</parameter>
     <!-- SpringBeanName固定的不能改,关联spring中注入的bean的id -->
     <parametername="SpringBeanName">checkLabelServiceImpl</parameter>
      <!--
              在这里最值得注意的是<messageReceivers>元素,该元素用于设置处理WebService方法的处理器。
              例如,getGreeting方法有一个返回值,因此,需要使用可处理输入输出的RPCMessageReceiver类,
              而update方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。
     -->
     <messageReceivers>   
            <messageReceivermep="http://www.w3.org/2004/08/wsdl/in-out"class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>   
            <messageReceivermep="http://www.w3.org/2004/08/wsdl/in-only"class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>   
     </messageReceivers>  
     <!-- 定义webservice接口的命名空间 -->
      <schemaschemaNamespace="http://service.checkservice.cn"/>
  </service>   
</serviceGroup>

  

同时必须在springmvc的配置文件中添加如下一句话,否则就会报错,切记这里必须加入到springmvc的配置文件中,而不能加入到spring的配置文件中



web.xml中相关的axis2的配置



服务端

服务的相关接口
public interface ICheckLabelService {
     
     //测试webservice的连通性方法
     publicString checkLabeltest(String abc);
     
   //查询标签信息(先不做消费更新操作)
   public String checkLabel(String labelid,String consCode);
}


服务接口的实现类
packageorg.jymf.webservice.impl;
importjava.math.BigDecimal;
importjavax.annotation.Resource;
importorg.jymf.entity.Comment;
importorg.jymf.entity.Depict;
importorg.jymf.entity.LabelIndex;
importorg.jymf.entity.LabelInfo;
importorg.jymf.service.ICommentService;
importorg.jymf.service.ICordycepsLogisService;
importorg.jymf.service.ILabelInfoService;
importorg.jymf.utils.AddressUtils;
importorg.jymf.utils.Constants;
importorg.jymf.utils.JsonUtil;
importorg.jymf.webservice.ICheckLabelService;
importorg.jymf.webservice.LoginCheck;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Component;
importcom.jymf.common.LableUtil;
/**
 *webservice的接口服务
 *@authorfjk
 */
@Component("checkLabelServiceImpl")
publicclass CheckLabelServiceImpl implementsICheckLabelService{
     
     publicString checkLabeltest(String name){
       return "hello "+name;  
    } 
     
     @Autowired
     privateILabelInfoService labelInfoService;
     
     @Autowired
     privateICommentService commentService;
     
     @Resource
     privateICordycepsLogisService cordycepsLogisService;
     
   
   public String checkLabel(String labelid,String consCode){
     //用户查询的用户名/密码是否正确
     if(!LoginCheck.checkUserPwd()){
          return"{'errorMsg':'用户查询用户名或密码错误'}";
     }
     
     System.out.println(LoginCheck.getClientIp());
     if(!labelIdChk(labelid)){
              // 追溯码错误
              return"{'errorMsg':'标签id错误'}";
          }
     // 16 位追溯码 = 12 顺序码 + 4 位验证码
          if(!consIdChk(labelid+consCode)){
              return"{'errorMsg':'标签id或验证码错误'}";
          }
          StringaddressCode = AddressUtils.getAddressByIp(LoginCheck.getClientIp());
          BooleanisCons=true;
          StringlabelId = labelid.substring(0,labelid.length()-4);
          LabelIndexlabelIndex = null;
          if(labelid.length()==22) {
              labelIndex= labelInfoService.getZYLabelIndex(labelId);
          }else{
              labelIndex= labelInfoService.getLabelIndex(Long.parseLong(labelId));
          }
          if(null== labelIndex){
              return"{'errorMsg':{'labelindex':'标签段未注册'}}";
          }
          LabelInfolabelInfo = labelInfoService.getLableinfo(labelId,isCons,labelIndex,addressCode,newBigDecimal(labelIndex.getWorkMode()));
          // 获取产品基本信息
          if(null== labelInfo){
              return"error";
          }
          Depictdepict = labelInfo.getLabelIndex().getDepict();
          if(null!= depict){
              Stringdepicts = depict.getDepicts();
               if(null!=depicts&& !depicts.equals("")){
                    depict.setDepicts(paragrap(depicts));
               }
          }
          if(null!=labelInfo.getDescription() && !labelInfo.getDescription().equals("")){
               labelInfo.setDescription(paragrap(labelInfo.getDescription()));
          }
          if(labelIndex.getWorkMode()==Constants.WM_QP){
              Commentcmt = commentService.queryComtById(labelid);
              if(cmt!=null){
                   labelInfo.setComment(cmt);
              }
          }
          returnJsonUtil.toJson(labelInfo);
    }
   /**
      * 追溯码check
      *@param labelId
      *@return
      */
     privatebooleanlabelIdChk(String labelId){
          returnLableUtil.checkLabel16(labelId).equals("0");
     }
     /**
      * 16 + 4位追溯码,验证
      *@param id 20位码
      *@return
      */
     privatebooleanconsIdChk(String id){
          returnLableUtil.checkLabel20(id).equals("0");
     }
   /**
     * 将输入字符串转换成段落格式
     *@param strs
     *@return
     */
   privateString paragrap(String strs) {
        String[]lines = strs.split("\r\n");
        StringBuilderstrDepicts = newStringBuilder();
       for(Stringline : lines){
           strDepicts.append(String.format("<p>%s</p>\r\n",line.replace(" ","  ").trim()));
        }
       return strDepicts.toString();
    }
}


服务端登录加密
public class LoginCheck {
     /**
      * 用户查询登录校验
      *@throwsAxisFault
      */
     publicstatic boolean checkUserPwd(){ 
          //获取消息上下文
        MessageContextmsgContext = MessageContext.getCurrentMessageContext(); 
       // 获取Head 
       Iterator list= (Iterator) msgContext.getEnvelope().getHeader().getFirstElement().getChildren(); 
        StringUsername = ""; 
        StringPassword = ""; 
       while (list.hasNext()){ 
            OMElementelement = (OMElement) list.next(); 
           if (element.getLocalName().equals("Username")) { 
               Username = element.getText(); 
            } 
           if (element.getLocalName().equals("Password")) { 
               Password = element.getText(); 
            } 
        } 
       //校验用户名及密码是否正确
       if (!Username.equals("admin") || !Password.equals("password")) { 
          returnfalse;
        }else{
              returntrue;
          }
    }
     /**
      * 获取客户端ip
      *@return
      */
     public static String getClientIp() {
            MessageContextmc = MessageContext.getCurrentMessageContext();
            HttpServletRequestrequest = (HttpServletRequest) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
            System.out.println("remote  ip:  " + request.getRemoteAddr());
           return request.getRemoteAddr();
      }
}



客户端

客户端接口及客户端加密
public class WebClient {
     publicstatic void main(String[]args) {
          testRPCClient();
     }
     publicstatic void testRPCClient() { 
       try {
         // axis2 服务端 
          Stringurl = "http://ip:port/project/services/checkService?wsdl"; 
         // 使用RPC方式调用WebService 
          RPCServiceClientserviceClient = newRPCServiceClient(); 
         // 指定调用WebService的URL 
          EndpointReferencetargetEPR = newEndpointReference(url); 
          Optionsoptions = serviceClient.getOptions(); 
         //确定目标服务地址 
         options.setTo(targetEPR); 
         //初始化命名空间,及方法名
          QNameqname = newQName("http://service.checkservice.cn","checkLabel"); 
         // 指定checkLabel方法的参数值 
          Object[]parameters = newObject[] {"1000020993216988","5546"}; 
         serviceClient.addHeader(createHeaderOMElement());
         //调用方法一 传递参数,调用服务,获取服务返回结果集 
          OMElementelement = serviceClient.invokeBlocking(qname,parameters); 
         //值得注意的是,返回结果就是一段由OMElement对象封装的xml字符串。 
         //我们可以对之灵活应用,下面我取第一个元素值,并打印之。因为调用的方法返回一个结果 
          Stringresult = element.getFirstElement().getText(); 
          System.out.println(result); 
        }catch (AxisFault e) { 
         e.printStackTrace(); 
        } 
    }
     /**
      * 客户端进行加密
      */
     publicstatic OMElement createHeaderOMElement(){  
          OMFactoryfactory = OMAbstractFactory.getOMFactory();  
          OMNamespaceSecurityElementNamespace= factory.createOMNamespace("http://handler.com","wsse");  
        OMElementauthenticationOM = factory.createOMElement("Authentication",SecurityElementNamespace); 
       //定义用户名
        OMElementusernameOM = factory.createOMElement("Username",SecurityElementNamespace);
       //定义密码
        OMElementpasswordOM = factory.createOMElement("Password",SecurityElementNamespace);  
       //设置用户名
       usernameOM.setText("admin");  
       //设置密码
       passwordOM.setText("password");  
       authenticationOM.addChild(usernameOM);  
       authenticationOM.addChild(passwordOM);  
       return authenticationOM;  
     }  
}



然后访问http://ip:port/project/services/checkService?wsdl,这是会出现下面的信息




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要使用Axis2在Java中实现Web服务接口,可以按照以下步骤进行: 1. 下载和安装Axis2:首先,你需要下载并安装Axis2框架。你可以从Apache官方网站(https://axis.apache.org/axis2/java/core/download.cgi)上下载最新版本的Axis2。 2. 创建Java项目:使用你喜欢的Java开发工具(如Eclipse、IntelliJ IDEA等),创建一个新的Java项目。 3. 导入Axis2库:将Axis2库导入到你的项目中。你可以将下载的Axis2库文件添加到项目的构建路径中,或者使用构建工具(如Maven、Gradle等)来管理依赖项。 4. 创建Web服务接口:在项目中创建一个Java接口,定义你的Web服务接口。这个接口将包含你希望暴露给客户端的操作。 ```java public interface MyWebService { public String processRequest(String request); } ``` 5. 实现Web服务接口:创建一个Java类来实现你的Web服务接口。 ```java public class MyWebServiceImpl implements MyWebService { public String processRequest(String request) { // 处理Web服务请求并返回响应 return "Hello, " + request + "! This is a response from the web service."; } } ``` 6. 创建服务端:使用Axis2创建一个服务端来发布你的Web服务。 ```java import org.apache.axis2.transport.http.server.HttpServiceProcessor; public class WebServiceServer { public static void main(String[] args) { try { // 创建服务端配置 ConfigurationContext configContext = ConfigurationContextFactory.createDefaultConfigurationContext(); // 创建服务端 Axis2Server server = new Axis2Server(configContext); // 注册Web服务实现类 server.addService(MyWebService.class.getName(), new MyWebServiceImpl()); // 启动服务端 server.start(); System.out.println("Web service is running."); } catch (AxisFault e) { e.printStackTrace(); } } } ``` 7. 构建和运行:构建并运行你的Java项目。服务端将会启动,并在默认端口(一般为8080)上监听来自客户端的请求。 8. 创建客户端:使用Axis2创建一个客户端来调用你的Web服务。 ```java import org.apache.axis2.client.ServiceClient; import org.apache.axis2.client.Options; import org.apache.axis2.addressing.EndpointReference; public class WebServiceClient { public static void main(String[] args) { try { // 创建服务客户端 ServiceClient client = new ServiceClient(); // 创建服务端点引用 EndpointReference targetEPR = new EndpointReference("http://localhost:8080/axis2/services/MyWebService"); // 设置服务端点地址 Options options = new Options(); options.setTo(targetEPR); client.setOptions(options); // 创建请求操作 QName operationName = new QName("http://example.com/MyWebService", "processRequest"); Object[] operationParams = new Object[] { "John" }; Class[] operationReturnTypes = new Class[] { String.class }; // 调用Web服务操作 Object[] response = client.invokeBlocking(operationName, operationParams, operationReturnTypes); String result = (String) response[0]; System.out.println("Response from web service: " + result); } catch (AxisFault e) { e.printStackTrace(); } } } ``` 9. 构建和运行:构建并运行你的Java客户端项目。客户端将会调用服务端的Web服务,并接收并打印响应。 通过以上步骤,你可以使用Axis2在Java中实现和调用Web服务接口。请注意,根据你的实际需求,可能需要配置和调整Axis2的一些参数和设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fjkxyl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值