axis2 webservice下实现AXIOM service的完整步骤

  • 原理:
AXIOM,即OMElement(也称为 OM)
AXIS2会将Web service的 方法中的参数,返回值中 的自定义对象、数组、List等类型 统一映射为OMElement类型
我们需要做的:   编写OMElement与类型之间的转换方法

  • 1.先编写OMElement与类型之间的转换方法的util class
web service和client 都调用这个类型转换工具类,实现OMElement向基本类型和用户类的转换,以及反方向的基本类型和用户类向OMElement的转换                       

public class OMElementStudent1Util {

   
    public static void main(String[] args) throws AxisFault {

    }
   
    ///object to OMElement

    public static OMElement plainString2OMElement(String targetNameSpace,String prefix,String titleString,String retString){
        // 获取OMNamespace
        OMFactory fac=OMAbstractFactory.getOMFactory();
        OMNamespace omNs=fac.createOMNamespace(targetNameSpace,prefix);

        OMElement resp=fac.createOMElement(titleString,omNs);
        resp.setText(retString);
        return resp;
    }
   
    public static OMElement object2OMElement_pull(Object obj){
        XMLStreamReader reader = BeanUtil.getPullParser(obj)      
        StreamWrapper parser = new StreamWrapper(reader);
        StAXOMBuilder stAXOMBuilder
           =OMXMLBuilderFactory.createStAXOMBuilder(OMAbstractFactory.getOMFactory(), parser);
        OMElement element = stAXOMBuilder.getDocumentElement();
        return element;
    }
   
    public static OMElement object2OMElement(Object[] oArray,String type){
        OMElement omElement=
                 BeanUtil.getOMElement(new QName("root"),oArray,new QName(type),false,null);   
        return omElement;
    }
   
    //OMElement to basic type/
   
    public static String OM2PlainString(OMElement in){
        return in.getText().trim();
    }
   
    public static List OM2ListString(OMElement in){
          Iterator iterator = in.getChildElements();

          List<String> list = new ArrayList<String>(); 
          while (iterator.hasNext()) {
           OMNode omNode = (OMNode) iterator.next();   

           if (omNode.getType() == OMNode.ELEMENT_NODE) {
                  // 如果子对象也是element节点类型的话(其他还有文本节点, CDATA节点等)  
            OMElement omElement = (OMElement) omNode;    
            if (omElement.getLocalName().equals("String")) { //看是否是对应类型  
                 list.add(omElement.getText().trim());  //获得返值
            } // end of if           
           } // end of if
          } // end of while
         
          return list;
    }
  
//OMElement to business Object type
   
    public static Object OM2ObjectPrint(OMElement in) throws AxisFault{
          Iterator iterator = in.getChildElements();
         
          Student1 stu = new Student1();
          List<Student1> list = new ArrayList<Student1>();
          while (iterator.hasNext()) {             
              System.out.println("--------------------------------");     
           OMNode omNode = (OMNode) iterator.next();  
           System.out.println("omNode.getType:"+omNode.getType());         
           if (omNode.getType() == OMNode.ELEMENT_NODE) {
            OMElement omElement = (OMElement) omNode;              
            System.out.println("omElement.getLineNumber:"+omElement.getLineNumber());
            System.out.println("omElement.getLocalName:"+omElement.getLocalName());          
            System.out.println("omElement.getText:"+omElement.getText());
           
            if (omElement.getLocalName().toLowerCase().equals("age")) {
                stu.setAge(Integer.parseInt(omElement.getText()));    
            }
            if (omElement.getLocalName().toLowerCase().equals("id")) {
                stu.setId(Integer.parseInt(omElement.getText()));    
            }   
            if (omElement.getLocalName().toLowerCase().equals("name")) {
                stu.setName(omElement.getText());    
            }           
           }
          }
         
          return stu;
    }
   
   
    public static Object OM2Object1(OMElement in) throws AxisFault{
       
          //从element获取其子对象的迭代器
          Iterator iterator = in.getChildElements();
         
          Student1 stu = new Student1();

          while (iterator.hasNext()) {
           OMNode omNode = (OMNode) iterator.next();    
           if (omNode.getType() == OMNode.ELEMENT_NODE) {
            OMElement omElement = (OMElement) omNode;   
            if (omElement.getLocalName().toLowerCase().equals("age")) {
                stu.setAge(Integer.parseInt(omElement.getText()));    
            }
            if (omElement.getLocalName().toLowerCase().equals("id")) {
                stu.setId(Integer.parseInt(omElement.getText()));    
            }   
            if (omElement.getLocalName().toLowerCase().equals("name")) {
                stu.setName(omElement.getText());    
            }           
           }
          }
         
          return stu;
    }

    public static Object OM2Object2(OMElement in) throws AxisFault{
       
          //从element获取其子对象的迭代器
          Iterator iterator = in.getChildElements();
         
          Student1 stu = new Student1();

          while (iterator.hasNext()) {
           OMNode omNode = (OMNode) iterator.next();    
           if (omNode.getType() == OMNode.ELEMENT_NODE) {
            OMElement omElement = (OMElement) omNode;   
            if(omElement.getLocalName().toLowerCase().equals("student1")){
                stu=(Student1)BeanUtil.processObject(omElement,Student1.class,null,true,new DefaultObjectSupplier());
            }           
           }
          }
         
          return stu;
    }
   
    public static List<Student1> OM2ObjectList(OMElement in) throws AxisFault{
       
          //从element获取其子对象的迭代器
          Iterator iterator = in.getChildElements();
         
          Student1 stu = new Student1();
          List<Student1> sList = new ArrayList<Student1>();
          while (iterator.hasNext()) {
           OMNode omNode = (OMNode) iterator.next();    
           if (omNode.getType() == OMNode.ELEMENT_NODE) {
            OMElement omElement = (OMElement) omNode;   
            if(omElement.getLocalName().toLowerCase().equals("student1")){
                stu=(Student1)BeanUtil.processObject(omElement,Student1.class,null,true,new DefaultObjectSupplier());
                 sList.add(stu);
            }
           
           }
          }
         
          return sList;
    }
   
}


  • 2.AXIOM webservice class
service class
@Service
public class TestOMSpring {
    @Autowired                       
    private StuService stuService;
   
   
    public OMElement findByIdPlain(OMElement in){
        String name=in.getText();    // 获取OMElement形式的参数,转换为常见的类型
                                                                                               
        // 程序逻辑
        Integer id=Integer.parseInt(name);
        String retString = stuService.getById(id).getName();
               
        // 生成返值
        return OMElementStudent1Util.plainString2OMElement(
               "http://test.machome.com","hw","findByIdResponse",retString);

    }
   
   
    public OMElement findAllString(OMElement in){
                                                                                       
        // 程序逻辑
        List<Student1> sList = stuService.findAll();
        String[] rets = new String[sList.size()];
        for(int i=0;i<rets.length;i++)
            rets[i]=sList.get(i).getName();       
       
        // 生成返值
        return  OMElementStudent1Util.object2OMElement(rets,"String");
    }
   
   
    public OMElement findAllList(OMElement in){
                                                                                               
        // 程序逻辑
        List<Student1> sList = stuService.findAll();
       
        List<String> rets = new ArrayList<String>(sList.size());
        for(int i=0;i<sList.size();i++)
            rets.add(sList.get(i).getName());
       
        // 生成返值
        // axiom对List也是转成数组处理的
        return  OMElementStudent1Util.object2OMElement(rets.toArray(),"String");

    }
   
   
    public OMElement findByIdObject_pull(OMElement in){
        String name=in.getText();    // 获取OMElement形式的参数,转换为常见的类型
                                                                                               
        // 程序逻辑
        Integer id=Integer.parseInt(name);
        Student1 retStu = stuService.getById(id);
       
        //生成返值       
        return OMElementStudent1Util.object2OMElement_pull(retStu);
    }
   
   
    public OMElement findByIdObject(OMElement in){
        String name=in.getText();    // 获取OMElement形式的参数,转换为常见的类型
                                                                                               
        // 程序逻辑
        Integer id=Integer.parseInt(name);
        Student1 retStu = stuService.getById(id);
       
        // 生成返值
        return  OMElementStudent1Util.object2OMElement(new Student1[]{retStu},"Student1");

    }

   
    public OMElement findAllObject(OMElement in){

        // 程序逻辑
        List<Student1> sList = stuService.findAll();
       
        // 生成返值
        return  OMElementStudent1Util.object2OMElement(sList.toArray(),"Student1");
    }
       
}
                       
META-INF/services.xml文件:    注意AXIOM方式的方法,要重新定义方法的messageReceiver为raw方式
<serviceGroup>
<service name="TestOMSpring" scope="application" targetNamespace="http://quickstart.samples/">
    <description>
        TestOMSpring Service
    </description>
   
    <parameter name="ServiceObjectSupplier">
        org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
    </parameter>
   
    <parameter name="SpringBeanName">testOMSpring</parameter>
   
    <messageReceivers>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
                         class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
                         class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
 
 <operation name="findByIdPlain">
 <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
  <operation name="findAllString">
 <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
  <operation name="findAllList">
 <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
 <operation name="findByIdObject_pull">
 <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
 <operation name="findByIdObject">
 <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
 <operation name="findAllObject">
 <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
</operation>
       
</service>

</serviceGroup >


  • 3.client 端           
public class TestOMSpringClient {

    private final static String TARGET_NAMESPACE = "http://test.machome.com";
    private final static String  PREFIX = "hw";
    private final static String  SERVICE_URL =
        "http://localhost:8080/axis2/services/TestOMSpring";
   
    public static void main(String[] args) throws AxisFault {

        ServiceClient sender = initClient(SERVICE_URL);
       
        getFindByIdPlain(sender,"1");
        getFindAllString(sender);
        getFindAllList(sender);       
        System.out.println("---------------------------");
        getFindByIdObject_pull(sender,"3");
        getFindByIdObject(sender,"2");
        getFindAllObject(sender);

    }
   
    public static ServiceClient initClient(String serviceUrl) throws AxisFault{

        EndpointReference targetEPR=new EndpointReference(serviceUrl);
       
        Options options=new Options();
        options.setTo(targetEPR);
       
        ServiceClient sender=new ServiceClient();
        sender.setOptions(options);
       
        return sender;
    }
    //basic type/
   
    public static void getFindByIdPlain(ServiceClient sender,String param) throws AxisFault{   
        OMElement method=OMElementStudent1Util.plainString2OMElement(
                TARGET_NAMESPACE,PREFIX, "findByIdPlain", param);
        OMElement result=sender.sendReceive(method);
        System.out.println(OMElementStudent1Util.OM2PlainString(result));
       
    }
   
    public static void getFindAllString(ServiceClient sender) throws AxisFault{   
        OMElement method=OMElementStudent1Util.plainString2OMElement(
                TARGET_NAMESPACE,PREFIX, "findAllString", null);

        OMElement result=sender.sendReceive(method);
       
         List<String> list = OMElementStudent1Util.OM2ListString(result);
         
          System.out.println("list:");
          for(String temp:list)
              System.out.println(temp);
    } 

    public static void getFindAllList(ServiceClient sender) throws AxisFault{       
        OMElement method=OMElementStudent1Util.plainString2OMElement(
                TARGET_NAMESPACE,PREFIX, "findAllList", null);
       
        OMElement result=sender.sendReceive(method);
       
         // 不管是数组还是List,在service端都被做成数组(list.toArray())
         List<String> list = OMElementStudent1Util.OM2ListString(result);
         
          System.out.println("list:");
          for(String temp:list)
              System.out.println(temp);
    } 
     //business Object type
    
    public static void getFindByIdObject_pull(ServiceClient sender,String param) throws AxisFault{
        OMElement method=OMElementStudent1Util.plainString2OMElement(
                TARGET_NAMESPACE,PREFIX, "findByIdObject_pull", param);

        OMElement result=sender.sendReceive(method);
        Student1 stu = (Student1)OMElementStudent1Util.OM2Object1(result);
        System.out.println(stu.getId()+":"+stu.getName()+":"+stu.getAge());
        
    }

    public static void getFindByIdObject(ServiceClient sender,String param) throws AxisFault{
        OMElement method=OMElementStudent1Util.plainString2OMElement(
                TARGET_NAMESPACE,PREFIX, "findByIdObject", param);

        OMElement result=sender.sendReceive(method);
        Student1 stu = (Student1)OMElementStudent1Util.OM2Object2(result);
        System.out.println(stu.getId()+":"+stu.getName()+":"+stu.getAge());
        
    }
    
    public static void getFindAllObject(ServiceClient sender) throws AxisFault{        
        OMElement method=OMElementStudent1Util.plainString2OMElement(
                TARGET_NAMESPACE,PREFIX, "findAllObject", null);

        OMElement result=sender.sendReceive(method);
        
        //OM2ObjectPrint(result);
         List<Student1> list = OMElementStudent1Util.OM2ObjectList(result);
          
          System.out.println("list:");
          for(Student1 temp:list)
              System.out.println(temp.getId()+":"+temp.getName()+":"+temp.getAge());    
    }
        
}
                   

执行测试
silly
list:
silly
mac
macy
mac2
list:
silly
mac
macy
mac2
---------------------------
3:macy:20
2:mac:20
list:
1:silly:20
2:mac:20
3:macy:20
4:mac2:20

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
activation-1.1.jar antlr-2.7.7.jar apache-mime4j-core-0.7.2.jar axiom-api-1.2.20.jar axiom-dom-1.2.20.jar axiom-impl-1.2.20.jar axiom-jaxb-1.2.20.jar axis2-adb-1.7.4.jar axis2-adb-codegen-1.7.4.jar axis2-clustering-1.7.4.jar axis2-codegen-1.7.4.jar axis2-corba-1.7.4.jar axis2-fastinfoset-1.7.4.jar axis2-java2wsdl-1.7.4.jar axis2-jaxbri-1.7.4.jar axis2-jaxws-1.7.4.jar axis2-jibx-1.7.4.jar axis2-json-1.7.4.jar axis2-kernel-1.7.4.jar axis2-metadata-1.7.4.jar axis2-mtompolicy-1.7.4.jar axis2-saaj-1.7.4.jar axis2-soapmonitor-servlet-1.7.4.jar axis2-spring-1.7.4.jar axis2-transport-http-1.7.4.jar axis2-transport-local-1.7.4.jar axis2-xmlbeans-1.7.4.jar bcel-findbugs-6.0.jar commons-cli-1.2.jar commons-codec-1.3.jar commons-fileupload-1.3.1.jar commons-httpclient-3.1.jar commons-io-2.1.jar commons-logging-1.1.1.jar geronimo-annotation_1.0_spec-1.1.jar geronimo-jaxws_2.2_spec-1.0.jar geronimo-jta_1.1_spec-1.1.jar geronimo-saaj_1.3_spec-1.0.1.jar geronimo-stax-api_1.0_spec-1.0.1.jar geronimo-ws-metadata_2.0_spec-1.1.2.jar gson-2.1.jar httpclient-4.5.2.jar httpcore-4.4.4.jar jaxb-api-2.2.6.jar jaxb-impl-2.2.6.jar jaxb-xjc-2.2.6.jar jaxen-1.1.6.jar jaxws-tools-2.2.6.jar jettison-1.3.jar jibx-bind-1.2.jar jibx-run-1.2.jar jsr311-api-1.1.1.jar juli-6.0.16.jar log4j-1.2.15.jar mail-1.4.jar mex-1.7.4-impl.jar neethi-3.0.3.jar stax2-api-3.1.1.jar tribes-6.0.16.jar woden-core-1.0M10.jar woodstox-core-asl-4.2.0.jar wsdl4j-1.6.2.jar xalan-2.7.0.jar xml-resolver-1.2.jar xmlbeans-2.5.0.jar xmlschema-core-2.2.1.jar
要使用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的一些参数和设置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值