WebService 开发与发布

本文详细介绍了在Java环境中开发和发布的WebService步骤。首先,讲解了服务器端的配置,包括引入必要的服务包,配置web.xml,创建server-config.wsdd文件。接着,展示了如何编写服务端代码并发布WebService。然后,讨论了客户端的基本配置和调用方法,包括引入所需包,配置soap-config.properties文件,以及调用接口的代码示例。

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

1.1  WebSevice

1.1.1  服务器端

1.1.1.1   WebService基本配置

A.       引入包

开发服务器端的WebService首先需要引入服务支持包:如下:

axis.jar axis-ant.jarcommons-discovery-0.2.jarcommons-logging-1.0.4.jar

   jaxrpc.jar log4j-1.2.8.jarlog4j.propertiessaaj.jarwsdl4j-1.5.1.jar 

B.        配置web.xml

引用webservice包之后,修改web.xml配置,配置如下:

<listener>     

<listener-class>
org.apache.axis.transport.http.AxisHTTPSessionListener
</listener-class>

</listener>

   

<servlet>

  <servlet-name>AxisServlet</servlet-name>

  <display-name>Apache-Axis Servlet</display-name>

  <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>

</servlet>

<servlet>

<servlet-name>AdminServlet</servlet-name>

<display-name>Axis Admin Servlet</display-name>

<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>

 <load-on-startup>100</load-on-startup>

      </servlet>

 

<servlet>

<servlet-name>SOAPMonitorService</servlet-name>

<display-name>SOAPMonitorService</display-name>

<servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>

<init-param>

      <param-name>SOAPMonitorPort</param-name>

      <param-value>5001</param-value>

 </init-param>

 <load-on-startup>100</load-on-startup>

       </servlet>

 

  <servlet-mapping>

    <servlet-name>AxisServlet</servlet-name>

    <url-pattern>/servlet/AxisServlet</url-pattern>

 </servlet-mapping>

 

<servlet-mapping>

    <servlet-name>AxisServlet</servlet-name>

    <url-pattern>*.jws</url-pattern>

 </servlet-mapping>

<servlet-mapping>

    <servlet-name>AxisServlet</servlet-name>

    <url-pattern>/services/*</url-pattern>

      </servlet-mapping>

<servlet-mapping>

    <servlet-name>SOAPMonitorService</servlet-name>

    <url-pattern>/SOAPMonitor</url-pattern>

      </servlet-mapping>

 

<!-- uncomment this if you want the admin servlet -->

 <!--

  <servlet-mapping>

<servlet-name>AdminServlet</servlet-name>

    <url-pattern>/servlet/AdminServlet</url-pattern>

  </servlet-mapping>

-->

    <!-- currently the W3C havent settled on a media type for WSDL;

    http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft

    for now we go with the basic 'it's XML' response -->

 <mime-mapping>

   <extension>wsdl</extension>

   <mime-type>text/xml</mime-type>

</mime-mapping>

 

  <mime-mapping>

    <extension>xsd</extension>

    <mime-type>text/xml</mime-type>

</mime-mapping>

C.        创建server-config.wsdd  (路径:/WEB-INF/server-config.xml

server-config.wsdd文件配置发布webservice服务

 

<?xml version="1.0" encoding="UTF-8"?> 

 

<deployment name="defaultClientConfig"

        xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"

    xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler"

    xmlns="http://xml.apache.org/axis/wsdd/">

    <globalConfiguration name="defaultClientConfig">

       <requestFlow name="RequestFlow1" type="">

<handler name="Handler1"
type="java:org.apache.axis.handlers.JWSHandler">

              <parameter name="scope" value="session" />

           </handler>

<handler name="Handler2"
type="java:org.apache.axis.handlers.JWSHandler">

              <parameter name="scope" value="request" />

              <parameter name="extension" value=".jwr" />

           </handler>

       </requestFlow>

    </globalConfiguration>

 

<handler name="URLMapper"
type="java:org.apache.axis.handlers.http.URLMapper" />

<handler name="LocalResponder"
type="java:org.apache.axis.transport.local.LocalResponder" />

<handler name="Authenticate"
type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />

        <transport name="http" type="">

       <requestFlow name="RequestFlow1" type="">

           <handler name="Handler1" type="URLMapper" />

           <handler name="Handler2"
type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />

       </requestFlow>

        </transport>

        <transport name="local" type="">

       <responseFlow name="ResponseFlow1" type="">

           <handler name="Handler1" type="LocalResponder" />

       </responseFlow>

    </transport>

 

 

<service name="LdapSoapServer" provider="java:RPC"
style="WRAPPED"  use="literal">

       <parameter name="scope" value="Session" />

           <parameter name="className" value="*.LdapSoapServer" />

           <parameter name="allowedMethods" value="*" />

<beanMapping qname="ns:UserDomain"
xmlns:ns="urn:BeanService"

<!—-说明:UserDomain 必须被序列化,如:

public class UserDomain implements Serializable{

private static final long serialVersionUID = 1180773928220076822L;

}

-->

languageSpecificType="java:com.report.vo.UserDomain"/>

<beanMapping qname="ns:OrganizationalUnitDomain"
xmlns:ns="urn:BeanService" languageSpecificType="java:com.report.vo.OrganizationalUnitDomain"/>

</service>

</deployment>

 

D.       编写服务端代码

package com.report.common.webservice.server;

public class LdapSoapServer {

public List<UserDomain> listUser(){

       return LdapADManager.getInstance().listUser();

    }

}

1.1.1.2   WebService发布

WebService发布操作的工作包括:

u  编写服务端JAVA接口

u  配置server-config.wsdd

服务器端的接口代码编写如上述D点,

<service name="LdapSoapServer" provider="java:RPC"
style="WRAPPED" use="literal">

       <parameter name="scope" value="Session" />

       <parameter name="className" value="*.LdapSoapServer" />

       <parameter name="allowedMethods" value="*" />

       <beanMapping qname="ns:UserDomain" xmlns:ns="urn:BeanService"
         languageSpecificType="java:com.report.vo.UserDomain"/>

<beanMapping qname="ns:OrganizationalUnitDomain"
xmlns:ns="urn:BeanService" languageSpecificType="java:com.report.vo.OrganizationalUnitDomain"/>

</service>

1.1.1.3   WebService访问

IE地址栏,输入:
http://localhost:8080/ztou/services/LdapSoapServer?wsdl,成功的展示页面如下:

1.1.2  客户端

1.1.2.1   客户端基本配置

A.       引入包

客户端的引用WebService首先需要加入一些服务支持包:如下:

axis.jar axis-ant.jarcommons-discovery-0.2.jarcommons-logging-1.0.4.jar

   jaxrpc.jar log4j-1.2.8.jarlog4j.propertiessaaj.jarwsdl4j-1.5.1.jar

soapclient.jar

1.1.2.2   客户端调用

客户端调用我编写了个调用接口包(soapclient.jar),调用配置部署的步骤如下:

u  配置远程webservice链接

web-inf/classes目录下引入配置文件soap-config.properties

配置文件属性名称格式:类名_SoapUrl 如:

LdapSoapServer_SoapUrl=http://localhost:8080/ztou/services/LdapSoapServer?wsdl

u  客户端调用代码

客户端提供传递简单对象、和传递复杂对象两种调用方式。

Ø  传递简单对象

简单对象指服务器端返回简单数据类型的数据,如:int ,Boolean, String

public void testAuthenticate() throws Exception{

       String srvClassName = "LdapSoapServer";

       String methodName = "listUser";

Object[] params = new Object[]{"administrator","cjis8888"};

Object returnOject = LdapSoapClient.getInstance().
executeSoap( srvClassName, methodName, params);

       int returnCode = (Integer)returnOject;

       System.out.println("验证返回编码:" + returnCode);

    }

Ø  传递复杂对象

复杂对象值服务器端返回自定义对象类型或List/Map类型的数据,如:List,Map,自定义的Java类型。

              public void testlistUser() throws Exception{

                     String srvClassName = "LdapSoapServer";

                     String methodName = "listUser";

             

                     Object[] params = new Object[]{};

                          Object returnObject = LdapSoapClient.getInstance().excuteSoapList(
srvClassName, methodName,null,params, "UserDomain","BeanService",
 UserDomain.class);

                     List<UserDomain> list = (ArrayList)returnObject;

             

                     System.out.println(list.size());

                     UserDomain ud = list.get(0);

                     System.out.println(ud.getUserName());

              }

说明:* @param srvClassName  服务器类名

        * @param methodName    服务器方法名

* @param paramNames    参数名字符串 单个参数格式:"ouName"   多个参数:
"ouName,userName"  
备注多个参数,参数间用逗号隔开

        * @param paramValues   参数值

        * @param qname               服务器的qname  :UserDomain

        * @param myNS          服务器的名称空间:BeanService

        * @param langSTClass   泛型自定义类型  UserDomain

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值