axis webservice 实验
使用axis创建webservice
1.下载axis jar包(在此文件夹中已存在)
2.创建一个web project 项目名称为axistest
在web.xml中添加axis相关配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>axistest</display-name>
<servlet>
<display-name>Apache-Axis Servlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet>
<display-name>Axis Admin Servlet</display-name>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
<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>AdminServlet</servlet-name>
<url-pattern>/servlet/AdminServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.在项目下新建一个包并创建一个类 SendInfo(该类中模拟服务端发送xml文件给客户端,之后客户端解析这个xml文件)
package com;
import java.io.IOException;
import java.io.StringWriter;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.XMLOutputter;
public class SendInfo {
public String sendYDSSInfo(){
Document document = new Document();
//根节点
Element root = new Element("SyncYDCGSS");
//CurrentMonth节点
Element currentMonth = new Element("CurrentMonth");
Element year = new Element("Year");
Element month = new Element("Month");
year.setText("2017");
month.setText("5");
currentMonth.addContent(year);
currentMonth.addContent(month);
Element DataArea = new Element("DataArea");
for(int i=0;i<2;i++){
Element info = new Element("YDSS");
if(i==0){
createInfoElement(info,"projectType","工程");
createInfoElement(info,"projectName","房屋工程");
}else{
createInfoElement(info,"projectType","物资");
createInfoElement(info,"projectName","生活物资");
}
createInfoElement(info,"isGZ","0");
createInfoElement(info,"gzReason","采用特定专利");
createInfoElement(info,"yearPlanAmount","21");
createInfoElement(info,"yearTenderAmount","21");
createInfoElement(info,"yearMoney","6116.87");
createInfoElement(info,"yearPlanAmountGZ","19");
createInfoElement(info,"executePlanAmount","2");
createInfoElement(info,"yearTenderGZ","19");
createInfoElement(info,"executeTenderGZ","4");
createInfoElement(info,"yearMoneyGZ","5336.87");
createInfoElement(info,"executeMoneyGZ","36.94");
createInfoElement(info,"yearPlanAmountQT","2");
createInfoElement(info,"executePlanAmountQT","0");
createInfoElement(info,"yearTenderQT","2");
createInfoElement(info,"executeTenderQT","0");
createInfoElement(info,"yearMoneyQT","780.00");
createInfoElement(info,"executeMoneyQT","0.00");
createInfoElement(info,"amountRate","100.00");
createInfoElement(info,"moneyRate","100.00");
createInfoElement(info,"createDate","2017-01-01");
createInfoElement(info,"updateDate","2017-04-01");
DataArea.addContent(info);
}
root.addContent(currentMonth);
root.addContent(DataArea);
document.setRootElement(root);
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root/>";
try {
StringWriter sw = new StringWriter();
XMLOutputter out = new XMLOutputter();
out.output(document, sw);
xml = sw.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return xml;
}
public String sendFGZDETAIL(){
Document document = new Document();
//根节点
Element root = new Element("SyncFGZDETAIL");
Element DataArea = new Element("DataArea");
for(int i=0;i<2;i++){
Element info = new Element("ZBMX");
if(i==0){
createInfoElement(info,"bjId","1");
createInfoElement(info,"tyep1","C工程");
}else{
createInfoElement(info,"bjId","2");
createInfoElement(info,"tyep1","B服务");
}
createInfoElement(info,"tyep2","0");
createInfoElement(info,"tyep3","01卷烟材料");
createInfoElement(info,"tyep4","04卷烟纸");
createInfoElement(info,"tyep5","03卷烟纸(全资三产)");
createInfoElement(info,"infoName","03卷烟纸(全资三产)");
createInfoElement(info,"purchase","北京卷烟厂");
createInfoElement(info,"name","20160101第一标段");
createInfoElement(info,"budget","27172.95");
createInfoElement(info,"procurement","单一来源");
createInfoElement(info,"reasonNo","中烟版[2012]313第16条");
createInfoElement(info,"otherReasonNO","其它");
createInfoElement(info,"createDate","2017-01-01");
createInfoElement(info,"updateDate","2017-05-01");
DataArea.addContent(info);
}
root.addContent(DataArea);
document.setRootElement(root);
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root/>";
try {
StringWriter sw = new StringWriter();
XMLOutputter out = new XMLOutputter();
out.output(document, sw);
xml = sw.toString();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return xml;
}
private void createInfoElement(Element info, String elementName, String userId) {
Element temp = new Element(elementName);
temp.setText(userId);
info.addContent(temp);
}
}
4.配置server-config.wsdd,在WEB-INF下新建server-config.wsdd文件,内容如下:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- 处理器 -->
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
<!-- 一个服务 -->
<!-- provider="java:RPC" webservice是以javabean的形式提供的-->
<service name="helloWorldService" provider="java:RPC">
<!-- 指定类名 -->
<parameter name="className" value="com.HelloWorld" />
<!-- 类中允许访问的方法 -->
<parameter name="allowedMethod" value="*"></parameter>
</service>
<service name="SendInfoService" provider="java:RPC">
<!-- 指定类名 -->
<parameter name="className" value="com.SendInfo" />
<!-- 类中允许访问的方法 -->
<parameter name="allowedMethod" value="*"></parameter>
</service>
<!-- 指定处理器 -->
<transport name="http">
<requestFlow>
<handler type="URLMapper"/><!-- 引用上边的 -->
</requestFlow>
</transport>
</deployment>
注意:
wsdd文件标签节点说明:
deployment:表明这是一个axis部署描述文件;
service:axis提供的一个web service服务。service标签中parameter allowedMethod用于指定一个以空格分隔的方法名,只有这些方法可以通过web service访问。也可以将这个值指定为“*”表示所有的方法都可以访问。
provider:服务类型,共有四种,分别是RPC,Document,Wrapped和Message。详见org.apache.axis.providers包的API文档;
parameter:用来设置Axis的各种属性;
requestFlow:局的请求Handlers,在调用实际的服务之前调用;
transport:定义了服务器端的传输方式
5.将项目部署到Tomcat上,启动项目就可以了。
在浏览器中输入 http://localhost:8080/axistest/services 出现内容,说明webservice 发布成功 ,之后点wsdl,就可以看到相关协议的内容(不清楚wsdl是什么,好像是什么协议之类的,具体的查查)
6.在axistest(服务端)项目中创建一个测试类进行测试
测试类如下
package test;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class Client {
public static void main(String[] args) {
Service service = new Service();
try {
Call call = (Call) service.createCall();
//设置地址
call.setTargetEndpointAddress(new java.net.URL("http://localhost:8080/axistest/services/SendInfoService?wsdl")); //这个URL就是在点wsdl后浏览器地址栏中的内容
//设置要执行的方法
//call.setOperationName(new QName("http://com","sayHello"));
call.setOperationName(new QName("http://com","sendYDSSInfo")); //这个是点wsdl后,页面上的一个内容,前面的是空间域名(好像是这个),后面这个是方法名
//设置要传入参数,如果没有要传入的参数,则不要写这个
//call.addParameter("msg", org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
//设置返回的类型
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
String name = "花非花雾非雾";
//执行,调用webservice
String result = (String) call.invoke(new Object[]{}); //现在的写法是不带参数的方法,如果要将上面的name作为参数传进去的话,可以这样写 String result = (String) call.invoke(new Object[]{name});
System.out.println("返回的结果是:"+result);
} catch (ServiceException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行之后就会在控制台上输出相关内容
上面这个是在服务端进行测试,主要是看看,有没有什么问题,下面说的是创建客户端,在客户端调用服务端的方法
1.编写一个 client.bat,可以通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码
client.bat内容如下
set Axis_Lib=F:\axis\axistest\WebRoot\WEB-INF\lib ---这个是axis.jar 包所在的位置
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=F:\my ------这个是在已存在的文件夹,之后生成的客户端代码会放在my文件夹中
set Package=com.qiusu.client -----这个是客户端的代码所在的包
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% http://10.128.220.56:9020/axistest/services/SendInfoService?wsdl
---这个是刚才浏览器地址栏中的内容
注意最后一行地址一定要跟在 %Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% 后面,不要换行,换行之后就执行不了,无法生成客户端代码
2.双击client.bat,生成客户端代码
注意:在双击的时候,服务端一定是要运行状态
3.新建一个web project 项目名:theclient,并将刚生成的客户端代码复制到src下
4.创建一个测试类,进行测试
package com.qiusu.test;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.qiusu.client.SendInfoService_ServiceLocator;
public class Test {
public static void main(String[] args) throws RemoteException, ServiceException {
/*SendInfoService_ServiceLocator service = new SendInfoService_ServiceLocator();
String ydss = service.getSendInfoService().sendYDSSInfo();
System.out.println(ydss);*/
ReadXml readXml = new ReadXml();
int i=0;
if(i==0){
//保存月度实施数据并从数据库中读取
readXml.readYDSSXML();
}else if(i==1){
//保存非公招明细并从数据库中读取
readXml.readFGZDetail();
}
}
}
说明:注释的代码可以直接测试,为注释的是我封装的方法用于读取服务端的方法,然后将读取的xml文件保存到数据库中(我用的数据库是DB2)
参考网站:
http://blog.csdn.net/hfhwfw/article/details/6099670
http://www.williamlong.info/archives/701.html
可能遇到的问题
1.如果发布到tomcat上面可以运行,但是发布到weblogic上却提示数组角标越界,这个问题的原因可能是因为jar包冲突
和可以正常部署的war包中的jar包比较一下,确定是哪个jar包的问题
2.部署成功之后,如果服务端用到了hibernate。在服务端测试的时候数据保存之类的操作都没有问题,但是在客户端调用的时候,却报
org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/***/***/entity/Zbmx.hbm.xml
出现这个错误,可以修改Zbmx.hbm.xml 文件的头信息
原来的头信息
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
修改后的头信息
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
这样改完之后就可以访问了
axis webservice 实验相关推荐
- 在原有AXIS WEBSERVICE基础如何制作不依赖AXIS并在WAS发布的WEBSERVICE
必须装有RAD或WSTK(这里只说前者),如果RAD中没有测试环境,则需要安装WAS6 新建WEB工程,并将AXIS相关的东西去掉: 1.所有AXIS相关的配置文件,并将WEB.xml中的AXIS的S ...
- 十、Axis WebService常用命令和调试工具
上面我们在发布wsdd服务的时候都会在dos窗口写上一段命令,下面还介绍下其他的几个命令: A. AdminClient 命令 java org.apache.axis.client.AdminCli ...
- Java+Axis WebService接口开发实例
一.下载Axis的jar包 下载地址:http://ws.Apache.org/axis/ 二.创建两个Web项目 1.WebService项目:负责提供接口,导入Axis的Jar包 (1)创建ser ...
- axis+webservice教程
利用 AXIS 开发 Webservice(一) -- 如何 发布自己的 webservice 先介绍下本人开发环境吧. JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜) ...
- JAVA CXF、XFIRE、AXIS webservice获取客户端IP
2019独角兽企业重金招聘Python工程师标准>>> import javax.annotation.Resource; import javax.servlet.http.Htt ...
- Java,AXIS,webService 调用 完整实例 xml 入参出参
* @param model* @return*/@ResponseBody@RequestMapping(value = "getDbPatientInfo" )public S ...
- axis的对象交由spring管理的配置
接着那个短信网关的项目,由于项目采用了spring.axis2和spring结合比较简单,但是axis和spring的结合可能要绕点路子哦. 首先GenUserImpl是我们要发布axis webse ...
- WebService中文件传输
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. WebService处理传递普通的信息,还可以传输文件,下面介绍WebService是怎么完成文件传 ...
- 数据挖掘 | 实验一 数据的清洗与预处理
文章目录 一.目的与要求 二.实验设备与环境 三.实验内容 数据清洗 数据集成 数据变换(统一格式并标准化) 四.实验小结 一.目的与要求 1)了解数据质量问题.掌握常用解决方法: 2)熟练掌握数据预 ...
- 二、用wsdd(Web Services Deployment Descriptor)方式发布WebService
wsdd方法比jws方法要稍微复杂些,但一定程度上比jws发布的方法要灵活. 1.首先在AxisWebService工程创建一个java类,里面写简单的2个方法getName.getAge,代码如下: ...
最新文章
- HDU 5734 Acperience (公式推导) 2016杭电多校联合第二场
- 是否可能有一台算力无穷大的计算机?
- 折线分割平面[HDU2050]
- python中count的作用_python中函数COUNT()的功能是什么
- mysql 批量建表_mysql 如何实现循环批量插入?
- php产生订单号不重复,php如何生成不重复订单号
- controller 中@autowired 报错_Spring中常用注解
- 怎样学好python编程-怎样学习python编程?
- JavaScript变量的声明与使用以及命名规范(3)
- 19. JavaScript RegExp 对象
- 【UFBA Practice Session for Brazilian ICPC Regionals - 2018】Carnival【强连通图求“关键边”】
- java怎么打开之前的文件_如何在java中打开文件之前等待windows进程完成
- zepto部分报错及解决方案
- python制作“电子钢琴”
- RFC2544测试指标
- echarts-横坐标文字竖着显示和倾斜45度显示
- 项目管理知识体系指南(七)项目质量管理
- F - Shifting String(置换的阶+思维)
- 曲面的渐近方向和共轭方向、主方向、曲率线网
- html设置顶部背景颜色,css怎么设置背景颜色?
热门文章
- ug导出html,UG如何将工程图导出到CAD中?
- Python画图源码|玫瑰花|皮卡丘|小猪佩奇|哆啦A梦|大白|小猫
- 【读书笔记】关键影响力:如何调动团队力量
- NLP中Tokenizers总结(BPE、WordPiece、Unigram和SentencePiece)
- Linux安装必须建立的三个分区
- 免费的局域网协作办公方式—onlyoffice文档协作
- 一级域名和二级域名的区别
- jQuery01(达)
- 管理软件软件开发_管理在软件开发中的作用
- 国足亚洲杯首败的背后:与韩国队只差一个孙兴民?