加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService 开发与发布

发布时间:2020-12-17 01:19:00 所属栏目:安全 来源:网络整理
导读:1.1 ? WebSevice 1.1.1 ? 服务器端 1.1.1.1 ? ? WebService 基本配置 A. ?????? 引入包 开发服务器端的 WebService 首先需要引入服务支持包:如下: axis.jar , axis-ant.jar , commons-discovery-0.2.jar , commons-logging-1.0.4.jar ?? jaxrpc.jar ,

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读