使用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 实验相关推荐

  1. 在原有AXIS WEBSERVICE基础如何制作不依赖AXIS并在WAS发布的WEBSERVICE

    必须装有RAD或WSTK(这里只说前者),如果RAD中没有测试环境,则需要安装WAS6 新建WEB工程,并将AXIS相关的东西去掉: 1.所有AXIS相关的配置文件,并将WEB.xml中的AXIS的S ...

  2. 十、Axis WebService常用命令和调试工具

    上面我们在发布wsdd服务的时候都会在dos窗口写上一段命令,下面还介绍下其他的几个命令: A. AdminClient 命令 java org.apache.axis.client.AdminCli ...

  3. Java+Axis WebService接口开发实例

    一.下载Axis的jar包 下载地址:http://ws.Apache.org/axis/ 二.创建两个Web项目 1.WebService项目:负责提供接口,导入Axis的Jar包 (1)创建ser ...

  4. axis+webservice教程

    利用 AXIS 开发 Webservice(一) -- 如何 发布自己的 webservice 先介绍下本人开发环境吧. JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜) ...

  5. JAVA CXF、XFIRE、AXIS webservice获取客户端IP

    2019独角兽企业重金招聘Python工程师标准>>> import javax.annotation.Resource; import javax.servlet.http.Htt ...

  6. Java,AXIS,webService 调用 完整实例 xml 入参出参

    * @param model* @return*/@ResponseBody@RequestMapping(value = "getDbPatientInfo" )public S ...

  7. axis的对象交由spring管理的配置

    接着那个短信网关的项目,由于项目采用了spring.axis2和spring结合比较简单,但是axis和spring的结合可能要绕点路子哦. 首先GenUserImpl是我们要发布axis webse ...

  8. WebService中文件传输

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. WebService处理传递普通的信息,还可以传输文件,下面介绍WebService是怎么完成文件传 ...

  9. 数据挖掘 | 实验一 数据的清洗与预处理

    文章目录 一.目的与要求 二.实验设备与环境 三.实验内容 数据清洗 数据集成 数据变换(统一格式并标准化) 四.实验小结 一.目的与要求 1)了解数据质量问题.掌握常用解决方法: 2)熟练掌握数据预 ...

  10. 二、用wsdd(Web Services Deployment Descriptor)方式发布WebService

    wsdd方法比jws方法要稍微复杂些,但一定程度上比jws发布的方法要灵活. 1.首先在AxisWebService工程创建一个java类,里面写简单的2个方法getName.getAge,代码如下: ...

最新文章

  1. HDU 5734 Acperience (公式推导) 2016杭电多校联合第二场
  2. 是否可能有一台算力无穷大的计算机?
  3. 折线分割平面[HDU2050]
  4. python中count的作用_python中函数COUNT()的功能是什么
  5. mysql 批量建表_mysql 如何实现循环批量插入?
  6. php产生订单号不重复,php如何生成不重复订单号
  7. controller 中@autowired 报错_Spring中常用注解
  8. 怎样学好python编程-怎样学习python编程?
  9. JavaScript变量的声明与使用以及命名规范(3)
  10. 19. JavaScript RegExp 对象
  11. 【UFBA Practice Session for Brazilian ICPC Regionals - 2018】Carnival【强连通图求“关键边”】
  12. java怎么打开之前的文件_如何在java中打开文件之前等待windows进程完成
  13. zepto部分报错及解决方案
  14. python制作“电子钢琴”
  15. RFC2544测试指标
  16. echarts-横坐标文字竖着显示和倾斜45度显示
  17. 项目管理知识体系指南(七)项目质量管理
  18. F - Shifting String(置换的阶+思维)
  19. 曲面的渐近方向和共轭方向、主方向、曲率线网
  20. html设置顶部背景颜色,css怎么设置背景颜色?

热门文章

  1. ug导出html,UG如何将工程图导出到CAD中?
  2. Python画图源码|玫瑰花|皮卡丘|小猪佩奇|哆啦A梦|大白|小猫
  3. 【读书笔记】关键影响力:如何调动团队力量
  4. NLP中Tokenizers总结(BPE、WordPiece、Unigram和SentencePiece)
  5. Linux安装必须建立的三个分区
  6. 免费的局域网协作办公方式—onlyoffice文档协作
  7. 一级域名和二级域名的区别
  8. jQuery01(达)
  9. 管理软件软件开发_管理在软件开发中的作用
  10. 国足亚洲杯首败的背后:与韩国队只差一个孙兴民?