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

根据已有的WSDL文件进行WebService服务开发和部署

发布时间:2020-12-16 22:41:08 所属栏目:安全 来源:网络整理
导读:如何根据 WSDL 文档开发部署 Web Service 服务? WSDL 文档是描述 Web Service 接口该如何开发和部署的具体描述文档,十分重要。一个接口的 WSDL 文档里会包含接口部署时的服务名 (service name) ,接口的绑定信息,绑定端口信息和接口方法中的参数信息等。

如何根据WSDL文档开发部署Web Service服务?

WSDL文档是描述Web Service接口该如何开发和部署的具体描述文档,十分重要。一个接口的WSDL文档里会包含接口部署时的服务名(service name),接口的绑定信息,绑定端口信息和接口方法中的参数信息等。根据这些信息,我们可以通过WSDL文档反向自动建立接口的java代码结构,提高开发工作效率。

下面介绍一下使用WSDL文档反向自动建立接口的java代码结构的步骤。

一、新建Dynamic Web Project 项目。

二、在项目中添加已有的WSDL文档。

WSDL文档直接放在项目根目录下。

wKiom1XRa7KBBuDbAAB5ahXfjMU489.jpg

WSDL文档内容说明:

wKioL1XRbeWStLlEAAewdwfKk7Y724.jpg


三、根据该WSDL反向生成接口java代码结构。

1、在项目上右键,进入新建web service配置窗口。

wKioL1XRbo3yDgGOAADUjPTHGic700.jpg

2、选择Web ServiceNext

wKiom1XRbKeRtYnoAAFGYMas-WU160.jpg


3、配置web service

包括创建web service用哪种类型、选择一个wsdl文档、配置tomcatweb service运行环境以及service所在项目、webservice处于哪个进度(选develop阶段)。

其中service implementations选择我们在步骤(三.1)中导入的wsdl文件。

Web service type选项栏中有两个可选项,分别是 Bottom up Java bean Web ServiceTop down Java bean Web Service。前者表示根据已有的JAVA文件生成WSDL文档和web service服务,后者表示根据已有的WSDL文档反向生成web service服务的JAVA代码结构。

在这里,我们选择后者。

wKioL1XRbuegAtPyAALb8W9TsVw439.jpg

wKioL1XRbwPSeRUgAAJLCF7JB3c331.jpg

wKiom1XRbRTjmZXqAAEoSRrzWEc652.jpg

4、接下来就都是next,最后finishweb service代码结构已经生成了。

wKiom1XRbTPRqWObAAMiGHNXSec534.jpg


接下来的工作,就是在IfAPServiceSoapBindingImpl.java文件中编写我们的业务逻辑代码,可以另外创建其他package包,合理安排代码模块。

wKioL1XRb1uCrf2tAAD6NvOiPZQ661.jpg


四、web service的业务代码编写完之后,开始发布。

1、新建发布文件server-config.wsdd

自动发布的方法,就是在项目的WEB-INF路径下新建一个server-config.wsdd发布文件。这个文件的大部分内容可以来源于模板(模板内容稍后贴出),只有<service>...</service>部分填写刚写好的web service的发布部署信息。这部分信息在自动生成的deploy.wsdd中已经有了,我们可以直接拿过来,复制到server-config.wsdd中。

wKioL1XRb6vxzRFXAAHjoCWuHbQ004.jpg

注: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="adminPassword" value=XXXX" />

?????? <"attachments.Directory" "D:TomcattempaxisWEB-INFattachments"/>

?????? <"attachments.implementation"

?????????? "org.apache.axis.attachments.AttachmentsImpl"/>

?????? <"sendXsiTypes" "true" />

?????? <"sendMultiRefs" "sendXMLDeclaration" "axis.sendMinimizedElements" requestFlow>

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

????????????? <"scope" "session"/>

?????????? </handler>

?????????? <"request"/>

????????????? <"extension" ".jwr"/>

?????????? </handler>

?????? </requestFlow>

??? </globalConfiguration>

??? <"LocalResponder"

?????? "java:org.apache.axis.transport.local.LocalResponder"/>

??? <"URLMapper" "java:org.apache.axis.handlers.http.URLMapper"/>

??? <"Authenticate"

?????? "java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>

??? <service "AdminService" provider="java:MSG">

?????? <"allowedMethods" "AdminService" />

?????? <"enableRemoteAdmin" "false" />

?????? <"className" "org.apache.axis.utils.Admin"/>

?????? <namespace>http://xml.apache.org/axis/wsdd/</namespace>

??? </service>

<!-- ? <service name="Version"provider="java:RPC"> -->

<!-- ????? <parameter name="allowedMethods"value="getVersion" /> -->

<!-- ????? <parameter name="className"value="org.apache.axis.Version" /> -->

<!-- ? </service> -->

??? <!--myself webservice-->

?<"IfAPService" "java:RPC" style="rpc"use="encoded">

?????<"wsdlTargetNamespace" "http://eaaapi.eaa.eidc.huawei.com/"/>

?????<"wsdlServiceElement" "IfAPService"/>

?????<"wsdlServicePort" "com.huawei.eidc.eaa.eaaapi.IfAPServiceSoapBindingSkeleton"/>

?????<"wsdlPortType" "APService"/>

?????<"typeMappingVersion" "1.2"/>

?????<"*"/>

?</service>

??? <transport "http">

?????? <"URLMapper" />

?????????? <"java:org.apache.axis.handlers.http.HTTPAuthHandler"/>

?????? </requestFlow>

?????? <"qs:list"

?????????? "org.apache.axis.transport.http.QSListHandler"/>

?????? <"qs.list"

?????????? "qs:method"

?????????? "org.apache.axis.transport.http.QSMethodHandler"/>

?????? <"qs.method"

?????????? "qs:wsdl"

?????????? "org.apache.axis.transport.http.QSWSDLHandler"/>

?????? <"qs.wsdl"

?????????? "org.apache.axis.transport.http.QSWSDLHandler"/>

??? </transport>

??? <"local">

?????? <responseFlow>

?????????? <"LocalResponder" />

?????? </responseFlow>

??? </transport>

</deployment>

2、发布web service

在上述步骤之后,我们可以发布接口项目了。只需要将项目打包成war文件,并将war包放到指定的tomcatwebapps路径下,启动tomcat。这里我们把打包的包名设为webTest.war

wKioL1XRcFqRRh73AADFwtJerv4265.jpg


3、查看发布的web service是否成功。

在浏览器中输入: http://localhost:8080/webTest/services

注意不要在”services”后面加斜杠/ ’),得到下面的结果,可知web service发布成功。

wKiom1XRbouiy7YOAADHzUR0zmM342.jpg


五、测试代码


import?java.io.IOException;
import?javax.xml.namespace.QName;
import?model.Utility;
import?org.apache.axis2.addressing.EndpointReference;
import?org.apache.axis2.client.Options;
import?org.apache.axis2.rpc.client.RPCServiceClient;
import?org.apache.commons.httpclient.HttpClient;
import?org.apache.commons.httpclient.HttpException;
import?org.apache.commons.httpclient.NameValuePair;
import?org.apache.commons.httpclient.methods.PostMethod;
import?org.apache.http.params.CoreConnectionPNames;

?

/**模拟ADCSI发送数据请求*/
public?class?ADC2SI?{

private?static?String?test_url?=?"http://172.0.0.1:8080/webTest/services/IfAPService";
//调用接口,发送post请求
public?static?void?main(String[]?args)?throws?HttpException,?IOException{
String?str?=?"params";
postmethod2(test_url,str);
}
public?static?void?postmethod2(String?url,?String?str)?throws?HttpException,?IOException{
//?使用RPC方式调用WebService
RPCServiceClient?serviceClient?=?new?RPCServiceClient();
Options?options?=?serviceClient.getOptions();
指定调用WebServiceURL
EndpointReference?targetEPR?=?new?EndpointReference(url);
options.setTo(targetEPR);
指定要调用的sayHelloToPerson方法及WSDL文件的命名空间QName?opAddEntry?=?new?QName("http://eaaapi.eaa.eidc.huawei.com","corpBinding");
指定方法的参数值Object[]?opAddEntryArgs?=?new?Object[]?{?str?};
方法返回值的数据类型的Class对象
@SuppressWarnings("
rawtypes")
Class[]?classes?=?new?Class[]?{?String.class?};
方法并输出该方法的返回值try{
System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs,?classes)[0]);
System.
out.println("发送数据?SUCCESS");
}catch(Exception?e){
System.
?FAILED");}}

(编辑:李大同)

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

    推荐文章
      热点阅读