Java webservice axis

本文详述了使用Java Axis构建Web服务的过程,包括server-config.wsdd的配置,涉及参数设置、请求处理和类型映射。同时,介绍了web.xml的配置以及服务器端BeanService类和客户端Client类的实现,实现了包含字符串数组和对象数组的类对象传输功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近由于项目需要,完成了关于Java webservice axis 的项目,记录下来,以供以后和各位网友参考。

首先关键的是server-config.wsdd,配置如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 

<globalConfiguration>
  <parameter name="sendMultiRefs" value="true"/>
  <parameter name="disablePrettyXML" value="true"/>
  <parameter name="dotNetSoapEncFix" value="true"/>
  <parameter name="enableNamespacePrefixOptimization" value="false"/>
  <parameter name="sendXMLDeclaration" value="true"/>
  <parameter name="sendXsiTypes" value="true"/>
 
 <parameter name="attachments.Directory" value="./attachments" />
 <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl" />
 
 <parameter name="sendMultiRefs" value="true" />

 <parameter name="axis.sendMinimizedElements" value="true" />
 <requestFlow>
  <handler type="java:org.apache.axis.handlers.JWSHandler">
   <parameter name="scope" value="session" />
  </handler>
  <handler type="java:org.apache.axis.handlers.JWSHandler">
   <parameter name="scope" value="request" />
   <parameter name="extension" value=".jwr" />
  </handler>
 </requestFlow>
 
</globalConfiguration>

  <handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>  
 
  <!-- 
  <service name="Login.jws" provider="java:RPC">  
     <parameter name="className" value="com.tacteonltd.colligo.Login"/>// 你要改的就是这.这写上要调用的类.就可以
     <parameter name="scope" value="request"/>
     <parameter name="allowedMethods" value="*"/> // 这*代表所有的方法
     <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
    
     <beanMapping qname="myNS:HCAIOCF18"
         xmlns:myNS="urn:BeanService"
         languageSpecificType="java:com.tacteonltd.colligo.premier.control.hcai.ws.HCAIOCF18"/>
    
    
  </service>
  -->
   <!--
  <service name="OrderProcessor" provider="java:RPC">
        <parameter name="className" value="com.tacteonltd.colligo.BeanService"/>
        <parameter name="scope" value="request"/>
        <parameter name="allowedMethods" value="*"/>
       
        <beanMapping qname="myNS:Order" xmlns:myNS="urn:BeanService" languageSpecificType="java:com.tacteonltd.colligo.Order"/>
       
    </service>
    -->
 
    <service name="OrderProcessor" provider="java:RPC">
        <parameter name="className" value="com.tacteonltd.colligo.Login"/>
        <parameter name="scope" value="request"/>
        <parameter name="allowedMethods" value="*"/>
       
        <beanMapping qname="myNS:HCAIOCF18" xmlns:myNS="urn:Login" languageSpecificType="java:com.tacteonltd.colligo.premier.control.hcai.ws.HCAIOCF18"/>
  
  <beanMapping qname="myns:HCAIOCF18NonSesionEstimated" xmlns:myns="myNS:HCAIOCF18" languageSpecificType="java:com.tacteonltd.colligo.premier.control.hcai.ws.HCAIOCF18NonSesionEstimated"/>
  
  
     <typeMapping
      xmlns:myNS="urn:Login"
      qname="myNS:HCAIOCF18"
   type="java:com.tacteonltd.colligo.premier.control.hcai.ws.HCAIOCF18"
   serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
   deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" /> 
       <typeMapping
       xmlns:ns="myNS:HCAIOCF18"
       qname="ns:ArrayOf_HCAIOCF18NonSesionEstimated"
       type="java:com.tacteonltd.colligo.premier.control.hcai.ws.HCAIOCF18NonSesionEstimated[]"
       serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
       deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
       encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
     />
    
         
    </service>
           
     <transport name="http">  
     <requestFlow>  
        <handler type="URLMapper"/>  
     </requestFlow>  
  </transport>  
</deployment>

 

接下来是web.xml,配置如下

 

<!-- web service -->
   
    <servlet>
        <servlet-name>AxisServlet</servlet-name>
        <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

Order.java 如下

package Test;


public class Order implements java.io.Serializable{
 private String customerName;

    private String shippingAddress;
   
    public String getCustomerName()
    { return customerName; }
    public void setCustomerName(String name)
    { customerName = name; }
   
    private String[] items;

 public String[] getItems() {
  return items;
 }
 public void setItems(String[] items) {
  this.items = items;
 }   
}

 

BeanService.java 服务器端代码:

 

package com.tacteonltd.colligo;


public class BeanService {
 public Order getNewOrder(Order order)
    {
        order.setCustomerName("changed man");
            
        Order order11 = new Order();
        order11.setCustomerName("121212 man ");
      
        String [] items = new String[] { "Ipod21212", "ThinkPad212121212" };
        order11.setItems(items);
       
        return order11;
    }
}

Client.java 客户端调用:

package Test;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class Client {
 private final static String targetEndpointAddress = "http://localhost:8080/New/services/OrderProcessor";
    private final static QName    qn      = new QName( "urn:BeanService", "Order" );


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


        Order order = new Order();
        order.setCustomerName("old man ");
        //order.addCount(10);
        String [] items = new String[] { "Ipod", "ThinkPad" };
        order.setItems(items);

        Service service = new Service();
        Call call = (Call) service.createCall();


        call.registerTypeMapping(Order.class, qn,
                                 new org.apache.axis.encoding.ser.
                                 BeanSerializerFactory(Order.class, qn),
                                 new org.apache.axis.encoding.ser.
                                 BeanDeserializerFactory(Order.class, qn));
        call.setTargetEndpointAddress(new java.net.URL(targetEndpointAddress));


        call.setOperationName(new QName("OrderProcessor", "getNewOrder"));
            call.addParameter("order", qn, ParameterMode.IN);
            call.setReturnType(qn, Order.class);
         Order   newOrder = (Order) call.invoke(new Object[] {order});
        System.out.println("new custname:"+newOrder.getCustomerName());
        //System.out.println("new number:"+newOrder.getInter().getCount());
        for(int i=0; i<newOrder.getItems().length; i++){
         System.out.println("Item " + (i+1) + newOrder.getItems()[i] );     
        }             
    }
}

如此,一个webservice 就完成了。

本项目中还完成了传送的类的对象的元素包含字符串数组和对象数组的功能,可谓一大突破。

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值