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

axis开发webservice

发布时间:2020-12-17 00:26:27 所属栏目:安全 来源:网络整理
导读:一、获取axis资源 ??? 在axis的官方网站http://ws.apache.org/axis/中获得开源项目,本例中采用axis-bin-1_4.zip 二、部署axis ? 1.单独部署 ???? (1) 解压axis-bin-1_4.zip,将axis-1_4webapps中的axis拷贝到tomcatwebapps目录中 ???? (2) 启动tomcat,访

一、获取axis资源

??? 在axis的官方网站http://ws.apache.org/axis/中获得开源项目,本例中采用axis-bin-1_4.zip

二、部署axis

? 1.单独部署

???? (1) 解压axis-bin-1_4.zip,将axis-1_4webapps中的axis拷贝到tomcatwebapps目录中

???? (2) 启动tomcat,访问http://localhost:8080/axis/(此地址中的端口8080视tomcat的配置而定),显示如下图

??????

? (3) 点击上图Validation链接,验证配置,如果出现NOTFound错误或警告,将相关jar包添加到tomcatwebappsaxisWEB-INFlib中,配置正确如下图

??

??(4) webservice列表页面,http://localhost:8080/axis/services,如下图

?

??2.集成到已有项目中

????(1) 将axis-1_4webappsaxisWEB-INFweb.xml中的相关配置拷贝到已有项目中的web.xml中

??? (2) 将axis-1_4webappsaxisWEB-INFlib中的jar包拷贝到项目中

三、web service开发

????(1) 手动开发

?????接口:PrintInterface?????

package web.service.print;

public interface PrintInterface {

	public String printStr(String s);

}

???? 实现类:PrintInterfaceImpl

package web.service.print;

public class PrintInterfaceImpl implements PrintInterface {

	public String printStr(String s) {
		// TODO Auto-generated method stub
		return "打印测试:"+s;
	}

}

??? (2) 通过Java2WSDL、WSDL2Java自动生成

?????? 目录结构

??????

????????a. 编写接口PrintInterface

package web.service.print;

public interface PrintInterface {

	public String printStr(String s);

}

???????b. 通过Java2WSDL创建printService.wsdl,命令行进入接口包的根目录src下,执行如下命令,完成后,在src下生成printService.wsdl

java -classpath D:workspaceworkspace3.3.2ticketwebWEB-INFclasses -Djava.ext.dirs="D:workspaceworkspace3.3.2ticketwebWEB-INFlib" org.apache.axis.wsdl.Java2WSDL -o printService.wsdl -l http://localhost:8080/axis/services/PrintService -n PrintService web.service.print.PrintInterface

??????-classpath? PrintInterface生成的class的根目录

????? -Djava.ext.dirs? 需要的额外的jar包,此处加载的是axis需要的jar包

?????-o? 生成wsdl文件名

????? -l? 生成的webservice的url

???? -n?webservice名称

?????web.service.print.PrintInterface? 包名+接口名

??????c. 通过printService.wsdl自动生成Java代码

????????? 在src目录下,执行如下命令

java -Djava.ext.dirs="D:workspaceworkspace3.3.2ticketwebWEB-INFlib" org.apache.axis.wsdl.WSDL2Java -S true -p web.service.print printService.wsdl


??????? -S? 是否生成deploy.wsdd和undeploy.wsdd

??????? -p? java代码生成的包

?????? 执行完成后,生成如下java代码

?????

??????? PrintServiceSoapBindingImpl是接口PrintInterface,需将Web Service的业务逻辑添加进去

????????PrintServiceSoapBindingStub、PrintInterfaceServiceLocator、PrintInterfaceService实现客户端调用

?????? 文件说明,参见http://www.ibm.com/developerworks/cn/webservices/ws-axisfaq/index.html

??????

四、web service发布

? 1. jws方式发布

????? a. 将PrintInterfaceImpl的代码去掉接口和包路径,如下

public class PrintInterfaceImpl{

	public String printStr(String s) {
		// TODO Auto-generated method stub
		return "打印测试:"+s;
	}

}

????? b. 将PrintInterfaceImpl,java改为PrintInterfaceImpl,jws后拷贝到tomcatwebappsaxistest目录下,发布完成

????? c. 验证是否能正常生成wsdl文件

???????? http://localhost:8080/axis/test/PrintInterfaceImpl.jws?wsdl

?

??2. 以class方式发布

????? a. 将上述生成的6个java文件的编译好的class文件拷贝到tomcatwebappsaxisWEB-INFclasses中,注意包的路径

????? b. 将deploy.wsdd、undeploy.wsdd拷贝到tomcatwebappsaxisWEB-INF下

????? c. 在tomcatwebappsaxisWEB-INF下运行如下命令发布,完成后,在本目录下生成server-config.wsdd

java -Djava.ext.dirs="D:apache-tomcat-6.0.29webappsaxisWEB-INFlib" org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/AdminService deploy.wsdd

????? d. 验证是否发布成功

????????? http://localhost:8080/axis/services/PrintService?wsdl

? 3. 以jar包方式发布

????? a. 将上述自动生成的6个java文件打成jar包:printws.jar

??????b. 将printws.jar拷贝到tomatwebappsaxisWEB-INFlib目录下

????? c. 将deploy.wsdd、undeploy.wsdd拷贝到tomcatwebappsaxisWEB-INF下

????? d. 在tomcatwebappsaxisWEB-INF下运行如下命令发布,完成后,在本目录下生成server-config.wsdd

java -Djava.ext.dirs="D:apache-tomcat-6.0.29webappsaxisWEB-INFlib" org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/AdminService deploy.wsdd

????? e. 验证是否发布成功

????????? http://localhost:8080/axis/services/PrintService?wsdl

五、web service 卸载

?????? a. 在tomcatwebappsaxisWEB-INF下运行如下命令卸载

java -Djava.ext.dirs="D:apache-tomcat-6.0.29webappsaxisWEB-INFlib" org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/AdminService undeploy.wsdd

?????? b. 验证

?????????? http://localhost:8080/axis/services

六、客户端调用

??????? a. 客户端不引入printws.jar调用

public class TestWebService {

	/**
	 * @param args
	 * @throws ServiceException 
	 * @throws MalformedURLException 
	 * @throws RemoteException 
	 */
	public static void main(String[] args) throws ServiceException,MalformedURLException,RemoteException {
		// TODO Auto-generated method stub
		
//		String endpoint = "http://localhost:8080/axis/test/Calculator.jws";
		String endpoint = "http://localhost:8080/axis/services/PrintService";
		Service service = new Service();
		Call call = (Call) service.createCall();
		call.setTargetEndpointAddress(new URL(endpoint));
		call.setOperationName("printStr");
		String s = (String) call.invoke(new Object[]{"123"});
				
		System.out.println(s);

	}

??????????? b. 客户端引入printws.jar调用的两种方式

????????????????PrintInterfaceServiceLocator调用

public class TestPrint {

	/**
	 * @param args
	 * @throws ServiceException 
	 * @throws RemoteException 
	 */
	public static void main(String[] args) throws ServiceException,RemoteException {
		// TODO Auto-generated method stub
		
		PrintInterfaceService ps = new PrintInterfaceServiceLocator();
		PrintInterface ws = ps.getPrintService();
		String s = ws.printStr("456");
		System.out.println(s);
		
	}

} 

????????????? PrintServiceSoapBindingStub调用

public class TestPrint {

	/**
	 * @param args
	 * @throws ServiceException 
	 * @throws RemoteException 
	 * @throws MalformedURLException 
	 */
	public static void main(String[] args) throws ServiceException,RemoteException,MalformedURLException {
		// TODO Auto-generated method stub
		
		URL endPoint = new URL("http://localhost:8080/axis/services/PrintService");
		PrintServiceSoapBindingStub pstub = new PrintServiceSoapBindingStub(endPoint,new Service());
		String s = pstub.printStr("456");
		System.out.println(s);
		
	}

} 


七、简单的wsdd文件

????? a. deploy.wsdd

<deployment name="test" xmlns="http://xml.apache.org/axis/wsdd/" 
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
<service name="PrintService" provider="java:RPC">
    <parameter name="className" value="web.service.print.PrintInterfaceImpl" />
    <parameter name="allowedMethods" value="*" />
</service>
</deployment> 

????? b. undeploy.wsdd

<undeployment
    xmlns="http://xml.apache.org/axis/wsdd/">

  <!-- Services from TestServiceService WSDL service -->

  <service name="PrintService"/>
</undeployment>


八、参考文章

??????? http://blog.csdn.net/m_yeah/article/details/4384532???????

??????? http://zhaoshg.iteye.com/blog/746756???????

??????? http://www.ibm.com/developerworks/cn/webservices/ws-axisfaq/index.html

(编辑:李大同)

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

    推荐文章
      热点阅读