- 浏览: 146109 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
murphee:
请问下如果要给header设置固定值呢?比如 <so ...
根据WSDL生成带SOAPHeader节点的报文 -
double_f:
这里有更详细解答,来自官方:jse为用于桌面应用软件,及服务器 ...
认识J2EE规范或标准以及J2EE和JEE有什么不同? -
除了你无可取代:
灰常不错的
关于ExtJS插件Spket安装指南 (转) -
hf_jj:
lz 你好 下载你的包发现点了没有生成代码 能否发一份可以的给 ...
Axis2_1.X学习笔记 -
faith515:
兄台 ,你咋个自动添加请求头的啊,我现在遇到一个问题没法解决呢 ...
根据WSDL生成带SOAPHeader节点的报文
用axis1.4发布自己的wsdl服务详解
开发自己的WebService:(参照附件目录结构)
Axis提供两种发布的方式:即时发布---Instant Deployment 与 定制发布---Custom Deployment
首先要部署axis服务,把Axis1_4目录下的axis拷贝到tomcat的webapps目录下,修改端口为8080
一、即时发布
1. 即时发布提供了一种非常简单的发布方式,发布者只要有java源代码,然后把其后缀名改为jws拷贝
到%TOMACAT_HOME%\webapps\axis目录下即完成所有的发布工作。axis编译引擎会处理接下来的事情。
2. 实例:
(1) 服务端代码:
public class HelloWorldJWS{ public String testJws(String name1,String name2){ String result = "name1="+name1+",name2"+name2; return result; } }
把HelloWorldJWS.java文件改为HelloWorldJWS.jws然后拷贝到%TOMACAT_HOME%\webapps\axis目录下。启动tomcat访问http://localhost:8080/axis/HelloWorldJWS.jws,如果你能看到Click to see the WSDL这个连接,OK发布成功。
(2) 客户端代码:
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 ClientJWS{ public static void main(String[] args){ try{ String url ="http://127.0.0.1:8080/axis/HelloWorldJWS.jws"; Service serv = new Service(); Call call = (Call)serv.createCall(); call.setTargetEndpointAddress(url); call.setOperationName(new Qname(url,"testJws")); String result = (String)call.invoke(new Object[]{"ml1","ml2"}); System.err.println(result); }catch(ServiceException e){ }catch(RemoteException e){ } } }
测试代码很简单,根据反射机制来的.
注意:假如你现在手里只有.class或者一个jar包,jws就不再能满足你的需求了,最要命的是即时发布不支持带包的类。
二、定制发布-----WSDD
1. 定制发布就是需要自己把你的发布的服务配置在xml文件里,然后在通过命令来发布。
2. 实例:
(1) 服务端代码:
package com.huawei.ws; public class HelloWorldWSDD{ public String testWsdd(String name1,String name2){ String result = "name1="+name1+",name2"+name2; return result; } }
把这个类编译为.class文件,拷贝到%TOMACAT_HOME%\webapps\axis\WEB-INF\classes目录下(即:HelloWorldWSDD.class在%TOMACAT_HOME%\webapps\axis\WEB-INF\classes\com\huawei\ws目录下)
(2) 接下来是编写deploy.wsdd文件:
在Axis1_4目录下新建deploy.wsdd文件,内容为:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- Services from ImsService WSDL service -->
<!--服务的名字/服务的类型(四种:RPC,Docment,Wrapped,Message)-->
<service name="HelloWorldWSDD" provider="java:RPC" style="wrapped" use="literal">
<parameter name="className" value="com.huawei.ws.HelloWorldWSDD"/>---服务的具体类
<parameter name="allowedMethods" value="*"/>---允许调用的方法
<parameter name="scope" value="request"/>
</service>
</deployment>
注意:service节点里还有很多配置项,大家可以网上看看API。
(3) 启动tomcat,双击deploy.bat即可发布成功,tomcat\webapps\axis\WEB-INF下多了一个server-config.wsdd。
发布服务成功,访问http://localhost:8080/axis/servlet/AxisServlet即可看见你发布的服务。
(4) 至于如何添加到自己的web工程里,可以参照前面说的axis1.4发布服务与web工程整合。
(5) 客户端调用可以根据发布成功的wsdl来生成。
Axis1.4发布的服务与web项目进行整合
对于目前做soap感言:如果客户端和服务端都是java可选择xfire,如果是异构系统之间做soap服务大家可以千万别用xfire,有bug而且很难对上,最好用axis。
关于AXIS1.4如何基于web工程发布webService服务端详解:
1. 设置环境变量
AXIS_HOME: s1.4的路径(D:\axis-1_4)
AXISCLASSPATH:对应你lib下面的jar包路径(D:\axis-1_4\lib\axis.jar;D:\axis-1_4\lib\axis-ant.jar;D:\axis-1_4\lib\commons-discovery-0.2.jar;D:\axis-1_4\lib\commons-logging-1.0.4.jar; D:\axis-1_4\lib\jaxrpc.jar;D:\axis-1_4\lib\saaj.jar;D:\axis-1_4\lib\log4j-1.2.8.jar;D:\axis-1_4\lib\wsdl4j-1.5.1.jar;)
2. 生成服务端代码命令:
WSDL2Java -o [放在那个包下面] -d Session -s -S true [wsdl路径]
Eg:WSDL2Java -o server -d Session -s -S true Centrex_IMS.wsdl
双击生成服务端代码脚本:wsdl2java.bat内容如下(如果用脚本可以省略s设置环境变量)
@echo -----------------------------------------
@echo 设置Output_Path设置为你要生成的路径
@echo Package设置为生成文件的包路径
@echo 最后是wsdl可以是文件路径 可以是URL
@echo WSDL2Java -o [放在那个包下面] -d Session -s -S true [wsdl路径]
@echo -----------------------------------------
set Axis_Lib=D:\axis-1_4\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Output_Path=D:\axis-1_4\server
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% D:\axis-1_4\Centrex_IMS.wsdl.xml
@pause
上面根据具体情况,要把axis相应路径替换为你自己的就OK了。
3. 如果测试可以接着下面的步骤:
(1) axis拷贝到TOMCAT_HOME/webapps。
(2) 把生成的代码编译为class文件(可以新建一个工程把生成的代码放到工程下面编译方法是:project--->clean 选择要生成class文件的项目)。
(3) 编译生长的class拷贝到TOMCAT_HOME/webapps\axis\WEB-INF\classes (这里可以把class打成jar,部署到WEB-INF\lib)。
(4) 启动Tomcat,将刚才生成的服务器端代码中的delopy.wsdd文件拷到一个目录下面用命令java
org.apache.axis.client.AdminClient deploy.wsdd 来部署服务器,部署成功会有相应的提示。
(5) 双击部署服务器脚本deploy.bat,内容如下:
@echo.
@echo 生成的server-config.wsdd在Tomcat发布的应用下
@echo.
set Axis_Lib=D:\axis-1_4\lib
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%
set Axis_Servlet=http://10.168.5.102:8080/axis/servlet/AxisServlet
%Java_Cmd% org.apache.axis.client.AdminClient -l%Axis_Servlet% D:\axis-1_4\deploy.wsdd
@pause
上面根据具体情况,要把axis相应路径替换为你自己的就OK了。
(6) 然后我们到Tomcat\webapps\axis\WEB-INF下会发现多了个server-config.wsdd文件。(注意,在执行此命令前,确保tomcat处于启动状态。)
(7) 通过http://localhost:8080/axis/下的List可以看到服务了。
4. 如何把生成的webService服务结合在自己的web项目中:
(1) 完成以上操作。
(2) 把上面生成的的代码拷贝到你项目的对应目录下面,写服务器端相关的业务逻辑类,实现接口,在xxxBindingImpl那个类中返回相关的值,也就是业务逻辑的对像。
(3) 把刚刚生成的server-config.wsdd拷贝到的WEB-INFO的目录下面。
(4) 把需要的axis的jar包拷贝的lib目录。
(5) 配置你的web.xml文件,添加一下内容:(略axis1.4自带的例子里面有(可能需要修改自己))
(6) 你访问的路径为:首先你可以根据测试路径访问到你的服务,看到你的服务名称
(http://localhost:8080/axis/servlet/AxisServlet)
当你完成你的服务和项目结合时,在发布访问路径为:http://localhost:8080/[项目发布名称]/ service/[你的服务名称]?wsdl(sevice可以在web.xml配置)。
axis1.4如何头部鉴权
1. 需要在发布的server-config.wsdd文件中加上以下节点:
(1) 添加:
<handler name="AuthByAxis" type="java:com.huawei.cmserver.unifyproxy.wsu.AuthByAxis"/>
name是不变的,死的;type是你自己实现的鉴权类。
(2) 在这个service里添加注释部分
<service name="CentrexService" provider="java:RPC" style="wrapped" use="literal">
<!--
<requestFlow>
<handler type="AuthByAxis" />
</requestFlow>
-->
2. 鉴权类模板为:
/* * 文件名: UserAuthentizationHandler.java * 版权: Huawei Technologies Co., Ltd. Copyright 1998-2009, All rights reserved * 描述: //FIXME 请添加相应的描述 * 修改人: tKF19110 * 修改时间: Nov 12, 2009 * 跟踪单号: * 修改单号: * 修改内容: 新增 */ package com.huawei.cmserver.unifyproxy.wsu; import java.util.List; import javax.xml.namespace.QName; import javax.xml.soap.SOAPException; import org.apache.axis.AxisFault; import org.apache.axis.Message; import org.apache.axis.MessageContext; import org.apache.axis.handlers.BasicHandler; import org.apache.axis.message.MessageElement; import org.apache.axis.message.SOAPHeader; import com.huawei.cmserver.common.log.CentrexLogFactory; import com.huawei.cmserver.common.log.ICentrexLog; import com.huawei.cmserver.unifyproxy.utils.InternationalizationUtils; import com.huawei.cmserver.unifyproxy.utils.ResourceConstant; /** * @author tKF19110 * @version 1.0, Nov 12, 2009 * @since VPNV600R002C02 * */ public class AuthByAxis extends BasicHandler { private static final ICentrexLog LOG = CentrexLogFactory.getLog(AuthByAxis.class); /** * @author tKF19110 */ private static final long serialVersionUID = -4607899940018396356L; public void invoke(MessageContext mc) throws AxisFault { try { Message msg = mc.getRequestMessage(); SOAPHeader header = (SOAPHeader) msg.getSOAPHeader(); if (header == null) { throw new AxisFault(new QName(ResourceConstant.HEADER_NULL_CODE), InternationalizationUtils.getMessage(ResourceConstant.HEADER_NULL, null), null, null); } List<?> list = header.getChildren(); MessageElement token = (MessageElement) list.get(0); if (null == token) { throw new AxisFault(new QName(ResourceConstant.HEADER_NULL_CODE), InternationalizationUtils.getMessage(ResourceConstant.HEADER_NODE_ERROR, null), null, null); } list = token.getChildren(); MessageElement nameNode = (MessageElement) list.get(0); String userName = nameNode.getValue(); MessageElement pwdNode = (MessageElement) list.get(1); String password = pwdNode.getValue(); WsuAuthentication authen = new WsuAuthentication(); if (authen.authentication(userName, password)) { LOG.info(userName + " login successful!!"); } else { LOG.error(" authentication failed!!"); throw new AxisFault(new QName(ResourceConstant.USER_PASSWD_ERROR), InternationalizationUtils.getMessage(ResourceConstant.USER_PASSWD_ERROR, null), null, null); } } catch (SOAPException e) { LOG.error(" authentication failed!!"); e.printStackTrace(); throw new AxisFault(new QName(ResourceConstant.HEADER_NULL_CODE), InternationalizationUtils.getMessage(ResourceConstant.AUTHENTICATION_ERROR, null), null, null); } } }
注意:附件里面得jar包已经删除,请到开源网站下载后使用。
- Axis1.4快速发布服务以及客服端详解(根据wsdl).rar (2.2 KB)
- 下载次数: 63
发表评论
-
用CXF开发SOAP接口
2012-02-01 13:26 3744请参照:apache-cxf-2.5.1、jdk1.6.0_1 ... -
根据一定规则的excel生成wsdl文件(工具源码)
2011-10-21 10:41 2565前一段时间,公司项目 ... -
Axis2_1.X学习笔记
2011-10-19 21:05 3857最近项目组经常的做SOAP接口,给 ... -
关于MyEclipse安装Axis2插件
2011-10-19 15:25 936关于插件安装 引用链接: (1) http://ww ... -
关于SOAP请求报文里的元素与wsdl中元素属性的关系
2011-09-29 23:27 5137关于SOAP请求参数顺序以及对象下面参数不全与wsdl中元素属 ... -
根据WSDL生成带SOAPHeader节点的报文
2011-09-29 23:18 13084在soap头鉴权中,往往我们要手动的添加SO ... -
WebService学习片段
2011-09-27 23:17 967SOA(Service-Oriented Architectu ... -
学习webService各种场景应用资料
2009-12-21 08:09 1132学习webService各种场景应用资料
相关推荐
标题"Axis2_1.X学习笔记"指的是关于Axis2的一个学习资源,其中1.X代表可能是1.4或者1.5等版本,Axis2是Apache软件基金会开发的一个开放源代码Web服务平台,主要用于构建和部署Web服务。这个学习笔记可能是对Axis2在1...
除了设置坐标轴的范围,我们还可以通过`plt.axis("equal")`确保x轴和y轴具有相同的度量单位,使得在绘制例如圆形的图形时能够保持正确的形状。 ### 总结 这份笔记整理详细介绍了量化分析中Tushare库和Matplotlib库...
在给定的"matlab学习笔记.pdf"中,我们探讨了如何使用MATLAB进行图形绘制以及一些关键的图形命令和属性。 首先,从描述中可以看到,MATLAB被用于绘制多个正弦波形的图形。通过`x=-2*pi:0.1:2*pi;`定义了x轴的取值...
【MATLAB学习笔记】 MATLAB是一款强大的数学计算和数据分析软件,广泛应用于科研和工程领域。以下是一些关于MATLAB的基本知识点: 1. **函数eval**: `eval`函数在MATLAB中用于执行字符串中的MATLAB代码。它可以...
在MATLAB的学习中,了解和掌握各种函数及操作是至关重要的。...以上就是MATLAB学习笔记中涉及的一些关键知识点,涵盖了函数使用、数据操作、图形绘制等多个方面,对于理解和使用MATLAB进行数据分析和计算很有帮助。
【Matlab学习笔记】 Matlab是一款强大的数学计算和数据分析软件,尤其在工程计算、科学建模和算法开发中广泛使用。以下是一些Matlab的基本概念和常用操作: 1. **文件命名与界面恢复**:Matlab是区分大小写的,...
8. **图形控制**:`plot`函数用于绘制二维图形,`axis`函数调整坐标轴范围,`axis equal`使X和Y轴单位长度相同,`axis square`使图像为正方形,`axis tight`适应性调整范围,`axis ij`和`axis xy`改变坐标轴方向,`...
pandas 和 numpy 笔记 在数据科学和机器学习中,pandas 和 numpy 是两种非常重要的库,它们提供了强大的数据处理和分析功能。下面是对 pandas 和 numpy 的一些重要知识点的总结。 数据导入 pandas 提供了多种方式...
在MATLAB的学习中,了解和掌握各种函数及操作是非常关键的。以下是一些关于MATLAB的重要知识点: 1. **函数eval**:`eval`函数在MATLAB中用于执行字符串中的MATLAB代码,它允许我们将字符串作为表达式来计算,从而...
### Pandas学习笔记 #### 一、简单操作 ##### 1. Series 对象 - **创建**:可以通过列表、NumPy 数组或字典来创建一个 `Series` 对象。 - 使用列表创建: ```python s = pd.Series([12, -4, 7, 9]) ``` - ...
你可以定义一个简短的匿名函数,如`f = @(x) 2*x`,这样`f`就成为了一个函数句柄,之后可以通过`f(1)`来调用这个函数,输出结果为2。 在Matlab中,基础绘图是十分重要的部分。可以使用`plot`函数来绘制二维曲线,有...
Fluent学习笔记 Fluent是一款功能强大且广泛应用于计算流体力学(CFD)的软件。以下是 Fluent 学习笔记中的重要知识点总结: 网格划分 * Quad:四边形网格,要求各对边节点数要相同 * Tri:三角形网格 * Quad/Tri...
**JFreeChart学习笔记** JFreeChart是一款强大的Java图表库,它允许开发者在应用程序、Swing组件、Applet或Web应用中创建各种复杂的图表。这个开源项目提供了多种图表类型,如饼图、柱状图、线图、散点图、甘特图等...