发布一个WebService服务:
a,在类上添加@WebService注解
(注:此注解是jdk1.6提供的,位于javax.jws.WebService包中)
b,通过EndPoint(端点服务)发布一个WebService
(注:EndPoint是jdk提供的一个专门用于发布服务的类,该类的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于 javax.xml.ws.Endpoint包中)
c,注: 类上添加注解@WebService,类中所有非静态方法都会被发布;
静态方法和final方法不能被发布;
方法上加@WebMentod(exclude=true)后,此方法不被发布;
已通过Endpoint发布了一个端点服务WebService,运行编译该class,在浏览器中输入正确的wsdl地址(url:http://172.11.1.111:8080/?wsdl)返回xml
这个xml的阅读方式:
1)先找service节点:每个wsdl中,有且只有一个service节点。也叫服务视图节点。service中有port节点服务端端口。
2)根据port节点的binding属性找binding节点。根据binding节点的type属性找portType节点。
3)portType节点就是我们定义的SEI服务的接口类型。Prottype中的operation 节点就是方法名称。
4)operation 节点的input就是参数的定义,output就是返回值的定义。
5)Input有个属性叫做message,message属性对应message节点。其中有一个element,对应element节点。
6)Element节点定义中xsd中。定义了数据的类型。参数和返回值都在其中定义。
想通过?wsdl生成WebService,调用WebService的方法。
1、选择生成的代码存放位置,可以新建一个项目或者
放在当前项目下(仅作测试用)
2、打开cmd,在dos命令下输入
wsimport -s “src目录” -p “生成类所在包名” -keep “wsdl发布地址”
示例:
wsimport -s D:\Wordspace\MyTest\webservice\src -p main.com.client -keep http://172.11.1.111:8080/?wsdl
一般src的下一层包是main、test等包,所以这里“生成类所在包名”要加上main这一层
3、成功则返回 parsing WSDL…
generating code…
compiling code…
4、(IDEA自动)刷新项目,可以看到已经生成了代码
另一种方法:使用Axis2
1、在当前项目的pom.xml中添加下述依赖
<!-- axis 1.4 jar start -->
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.2</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-saaj</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.4</version>
</dependency>
<!-- axis 1.4 jar end -->
在IDEA的项目package右键-->WebServices-->Generate Wsdl From Java Code,这个“Generate Wsdl From Java Code”也可以生成代码,而且跟用命令行生成的很像,但是用这个方法生成的代码到后面调用WebService接口的时候执行失败。我觉得这个方法也可以,但实际上不行,不知道哪里出错了。
接下来的操作照着图来,下面是解释:
Web service wsdl url:在浏览器输入能正确返回xml的wsdl地址
Output pahe和Package prefix是指定生成的文件放的位置
Web Service Platform:这里选择Apache Axis
Allow extensions :允许扩展
Generate TestCase:生成xxxServiceTestCase.java文件
Generate classes for schema arrays:从概要数组里生成class文件
Generate unreferenced elements:生成未引用的元素
Support wrapped document/literal style:支持document/literal类型的包装
extends是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法;
implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用
1、在项目的package右键
2、勾选Generate classes for schema arrays或者Generate unreferenced elements,其它随意,就能生成
主要是GetValue和GetValueResponse,其它类不管你勾选什么或者不勾选,都会自动生成
点击OK之后,发现无法下载,报错,一开始是找不到main,缺少了axis.jar,添加了之后又报找不到某一个class,另一个jar,接连手动添加了几个,猜测是缺少了jar,最后搜到某博客才引入了完整的maven 依赖,解决了问题点击进入该博客
虽然需要的类是下载下来了,但是会有警告
Jan 17, 2019 3:10:57 PM org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler
and javax.mail.internet.MimeMultipart). Attachment support is disabled.
缺少mail.jar,在tomcat的lib中找到mail-1.4.jar复制到client的lib中。重新运行,警告消失
部分内容参考自:https://blog.csdn.net/qazwsxpcm/article/details/70370490
-->axis2-kernel-1.6.1.jar
-->axis2-spring-1.6.1.jar
-->axis2-transport-http-1.6.1.jar
-->XmlSchema-1.4.7.jar
-->wsdl4j-1.6.2.jar
-->axiom-api-1.2.12.jar
-->axiom-impl-1.2.12.jar
-->neethi-3.0.1.jar
-->axis2-transport-local-1.6.1.jar
-->commons-httpclient-3.1.jar
-->axis2-jaxws-1.6.1.jar
-->spring.jar
-->commons-logging-1.1.1.jar
axis2 webservice client端jar包
-->axis2-kernel-1.6.1.jar
-->axis2-adb-1.6.1.jar
-->axiom-api-1.2.12.jar
-->commons-logging-1.1.1.jar
-->wsdl4j-1.6.2.jar
-->XmlSchema-1.4.7.jar
-->axiom-impl-1.2.12.jar
-->neethi-3.0.1.jar
-->axis2-transport-local-1.6.1.jar
-->axis2-transport-http-1.6.1.jar
-->commons-httpclient-3.1.jar
-->httpcore-4.0.jar
-->commons-codec-1.3.jar
在使用Idea根据wsdl自动生成java code的时候;抛出无法找到主类:org.apache.axis.wsdl.WSDL2Java(Throws Could not find main class: org.apache.axis.wsdl.WSDL2Java)。
添加本文的jar包压缩包解压出来的所有jar包到当前使用的java.exe 命令的lib目录下的ext目录中即可解决。
调用WSDL2Java需要相关jars,使用-cp添加进来,不支持使用通配符。提醒:Linux下jar之间使用冒号隔开:,windows下jar之间使用分号隔开
java -cp mail-1.4.jar;saaj-api-1.3.jar;jaxrpc-1.1.jar;commons-discovery-0.2.jar;commons-logging-1.1.jar;axis-1.4.jar;activation-1.1.jar;wsdl4j-1.4.jar org.apache.axis.wsdl.WSDL2Java http://*.*.*.*/SMSWebService/services/sigMessageServices?wsdl
乱码是因为文件编码不一致,Win10默认字符编码为936(GBK),导致IDEA根据wsdl生成的java文件编码为GBK,而如果IDEA设置了全局/项目编码为UTF-8,这时打开文件就会乱码。可修改IDEA配置,单独将乱码文件配置为GBK也能解决乱码问题,但是文件太多时很不方便。可借助EmEditor文本编辑器统一将所有选中的GBK文件转为UTF-8。
Axis 1.4依赖的jar包Maven配置文件<!-- axis 1.4 jar start -->
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
WebService概念:它可以让一个程序透明的调用互联网程序,不用管具体实现细节,只要WebService公开了服务接口,远程客户端就可以调用服务。Webservice基于HTTP协议,它是分布式应用程序的发展趋势。 Apache Axis是一个开源的WebSerbive运行引擎,现在拥有1.x和2.x两个版本。本文讲解Axis2.x版本,该版本较Axis1.x版本在体系结构上进行了重写,具有更高的效率、更加模块化也更加面向XML。Axis应该是最早一批SOAP(简单对象访问协议),该协议提供
POST /服务名.asmx HTTP/1.1
Host: 接口地址(x.x.x.x)(url :接口地址/服务名.asmx)
Content-Type: text/xml; charset=utf-8
Content-Length: le...
解决:java.lang.ClassNotFoundException: org.apache.axis.wsdl.WSDL2Java一·问题描述:1.idea解析wsdl文件失败,报错如图所示:二·报错原因:三·解决办法:
一·问题描述:
1.idea解析wsdl文件失败,报错如图所示:
二·报错原因:
idea的WebService Client工具解析wsdl文件,缺少相关的jar包
三·解决办法:
参考这个文章:IDEA如何解析wsdl文件为Java源代码
https://blog.csdn.ne
webService 调用服务端
// 需要导入的axis.jar包,
org.apache.axis.client.Service service = new Service();
//生成客户端
org.apache.axis.client.Call call = (Call)service.createCall();
//设置服务地址,指明远程调用的类, 设置url
call.setTargetEndpointAddress(new URL(url字符串));
//设置是否使用SoapAc
突然之间要用JAVA掉webservice 的接口,用Eclipse 和 axis1.4 结合来自动生成JAVA代码非常方便。1. 下载 axis1.4 相关包,解压后取得其中lib 下的所有JAR包,并导入ECLIPSE工程中。2. 取得服务端提供的 wsdl 描述文件。3. 在工程中运行 axis 包中的 wsdl2java :org.apache.axis.wsdl.WSDL2Java并设...
WSDL2Java操作指南 1. 安装JDK1.5, 配置系统环境变量:<br /> 下载安装JDK后, 设置环境变量:<br /> JAVA_HOME=C:/Program Files/Java/jdk1.5.0_02<br /> Path=%Path%;%JAVA_HOME%/bin(这里的%Path%指你系统已经有的一系列配置)<br /> CLASSPATH=%JAVA_HOME%/lib2. 下载axis, 配置系统环境变量:<br /> 下载axis后,配置如下:<br />
本文是Apache Axis的用户指南的第一部分。笔者在学习的过程中,作为记录,简单的翻译了一下。笔者已经翻译了Apache Axis的安装及应用文档,也谈不上翻译,只是笔者在学习的过程中,将笔者认为重要的部分作为记录,并加以笔者实践的结果。建议在阅读本文之前先阅读Apache Axis安装指南。0.介绍SOAP:SOAP是基于XML的通信协议和编码格式,它用于交互应用程序通信。现在的