简单的webService实例
来源:互联网 发布:游戏编程需要怎么学 编辑:程序博客网 时间:2024/05/22 17:26
参看博文:http://nopainnogain.iteye.com/blog/791525
项目的源码与所有jar包:http://pan.baidu.com/s/1qXQuDtE
本文主要是在原来的博文上的一些细节
1.开发的流程
此列子主要是在两个项目上进行测试,一个是web项目充当服务器使用在上面提供两个方法,一个是普通的java project充当测试项目,调用服务器的方法后就会返回一个字符串。从而实现两个系统之间的通讯(webservice 可以实现跨编程语言和跨系统的多个项目之间的通信)
1.1项目需求
项目类型项目名类名webprojectWebServiceTestHelloServicejava projectServiceClientTestHelloService1.2需要导如的jar(两个项目的jar包都一样)
web:jar包需要放在WebContent/WEB-INF/lib
java:直接通过build path添加
1.3需要到的文件server-config.wsdd,service.bat,web.xml结构如下
1.4整体的结构如下
2.webservice服务器实现过程
2.1编写服务器服务HelloService代码
代码提供了两个函数,分别为sayHello和sayHelloToPerson,源代码如下:
/* * File name: HelloService.java * * Version: v1.0 * * Created on Aug 2, 2008 9:40:20 AM * * Designed by Stephen * * (c)Copyright 2008 */ package com.sinosoft.webservice; /** *//** * @author Stephen * * Test web service */ public class HelloService { /** *//** * 不带参数的函数 * * @return 返回Hello字符串 */ public String sayHello() { return "Hello"; } /** *//** * 带参数的函数 * * @param name * 名称 * @return 返回加上名称的欢迎词 */ public String sayHelloToPerson(String name) { if (name == null || name.equals("")) { name = "nobody"; } return "Hello " + name; } }
2.2发布webservice
要将HelloService类发布为WebService,需要先搭建Web应用。下面是在Tomcat下使用Axis(http://ws.apache.org/axis/)创建WebService服务的例子。
2.2.1在WEB-INF文件夹下web.xml文件,该文件的内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Apache-Axis</display-name> <listener> <listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class> </listener> <servlet> <servlet-name>AxisServlet</servlet-name> <display-name>Apache-Axis Servlet</display-name> <servlet-class> org.apache.axis.transport.http.AxisServlet </servlet-class> </servlet> <servlet> <servlet-name>AdminServlet</servlet-name> <display-name>Axis Admin Servlet</display-name> <servlet-class> org.apache.axis.transport.http.AdminServlet </servlet-class> <load-on-startup>100</load-on-startup> </servlet> <servlet> <servlet-name>SOAPMonitorService</servlet-name> <display-name>SOAPMonitorService</display-name> <servlet-class> org.apache.axis.monitor.SOAPMonitorService </servlet-class> <init-param> <param-name>SOAPMonitorPort</param-name> <param-value>5001</param-value> </init-param> <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>SOAPMonitorService</servlet-name> <url-pattern>/SOAPMonitor</url-pattern> </servlet-mapping> <!-- uncomment this if you want the admin servlet --> <!-- <servlet-mapping> <servlet-name>AdminServlet</servlet-name> <url-pattern>/servlet/AdminServlet</url-pattern> </servlet-mapping> --> <session-config> <!-- Default to 5 minute session timeouts --> <session-timeout>5</session-timeout> </session-config> <!-- currently the W3C havent settled on a media type for WSDL; http://www.w3.org/TR/2003/WD-wsdl12-20030303/#ietf-draft for now we go with the basic 'it's XML' response --> <mime-mapping> <extension>wsdl</extension> <mime-type>text/xml</mime-type> </mime-mapping> <mime-mapping> <extension>xsd</extension> <mime-type>text/xml</mime-type> </mime-mapping> <welcome-file-list id="WelcomeFileList"> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.jws</welcome-file> </welcome-file-list> </web-app>
在上面的web.xml中主要是配置了axis的相关配置。
添加jar,具体的将位置和jar包在目录结构已经说了
至此,操作正常的话应该可以看到如下界面:
访问:http://127.0.0.1:8080/WebServiceTest/services
后台控制台:
原因是缺少了一个server-config.wsdd文件
2.2.2在WebContent/WEB-INF/lib创建server-config.wsdd文件
<?xml version="1.0" encoding="UTF-8"?><deployment xmlns="http://xml.apache.org/axis/wsdd/"xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"><handler type="java:org.apache.axis.handlers.http.URLMapper"name="URLMapper" /><!-- Services from SSOService WSDL service --><service name="HelloServices" provider="java:RPC"><parameter name="className" value="com.sinosoft.webservice.HelloService" /><parameter name="allowedMethods" value="*" /></service><transport name="http"><requestFlow><handler type="URLMapper" /> </requestFlow></transport></deployment>
发布WebService需要使用现有的AdminService来实现,这里写了一个批处理文件来发布WebService,以后如果需要发布其他文件,只需要修改相应的参数就可以了。
至此,能够正常访问http://127.0.0.1:8080/WebServiceTest/services界面如下:表示发布成功!
2.2.3创建批处理文件service.bat
直接在项目中创建批处理文件是不能够修改里面的内容的,这个时候的解决方法需要先把后罪名改为xml格式内容如下:
java -cp axis-ant.jar;axis-schema.jar;axis.jar;commons-discovery-0.2.jar;commons-logging-1.0.4.jar;jaxrpc.jar;log4j-1.2.8.jar;saaj.jar;wsdl4j-1.5.1.jar;xmlsec-1.3.0.jar org.apache.axis.client.AdminClient -lhttp://localhost:8080/WebServiceTest/services/AdminService server-config.wsdd pause
其中上面的jar包我都拷到和bat文件在同一个目录,现在将所有的jar文件都加入到classpath中进行执行。
-l后的参数是本地要发布WebService的AdminService对应的访问地址。
最后server-config.wsdd是对应的配置文件名称。
至此,访问http://127.0.0.1:8080/WebServiceTest/services/HelloServices?wsdl可以看到如下wsdl的内容:
3.创建java project 工程调用发布的webservice
导入jar包,两个项目的jar包都是一样的
编写测试代码:
/* * File name: TestHelloService.java * * Version: v1.0 * * Created on Aug 2, 2008 9:54:10 AM * * Designed by Stephen * * (c)Copyright 2008 */package test.com.sinosoft.webservice;import java.io.IOException;import java.net.MalformedURLException;import javax.xml.namespace.QName;import javax.xml.rpc.ServiceException;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;/** * @author Stephen * * 测试调用WebService */public class TestHelloService { private static final Log log = LogFactory.getLog(TestHelloService.class); private static final String HELLO_SERVICE_ENDPOINT = "http://127.0.0.1:8080/WebServiceTest/services/HelloServices?wsdl"; public static void main(String[] args) { TestHelloService tester = new TestHelloService(); // tester.callSayHello(); tester.callSayHelloToPerson(); tester.callSayHello(); } public void callSayHello() { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL( HELLO_SERVICE_ENDPOINT)); //下面名字查询的http://127.0.0.1:8080/WebServiceTest/services/HelloServices?wsdl文件里有 call.setOperationName(new QName("http://webservice.sinosoft.com/", "sayHello")); call.setReturnType(org.apache.axis.Constants.XSD_STRING); try { //远程调用发布的方法 String ret = (String) call.invoke(new Object[] {}); System.out.println("The return value is:" + ret); return; } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } log.error("call sayHello service error!"); } public void callSayHelloToPerson() { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(HELLO_SERVICE_ENDPOINT)); call.setOperationName(new QName("http://webservice.sinosoft.com/", "sayHelloToPerson")); call.addParameter("name", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN); call.setReturnType(org.apache.axis.Constants.XSD_STRING); try { String ret = (String) call.invoke(new Object[] { "Stephen" }); System.out.println("The return value is:" + ret); return; } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } log.error("call sayHello service error!"); }}需要将server.bat文件和server-config.wssd一起方法tomcat下的hellowservice下的calss下的web-inf 下
4.常见问题
4.1编译后的在tomcat 的webapps下没有看到生成的编译代码
解决方案:
双击tomcat服务器选择第二项:use tomcat installation,deploy path选择为webapps
4.2运行的时候报出不允许有匹配“[xX][mM][lL]”
严重: Parse Fatal Error at line 1 column 9: 不允许有匹配 "[xX][mM][lL]" 的处理指令目标。org.xml.sax.SAXParseException; systemId: jndi:/localhost/WebServiceTest/WEB-INF/web.xml; lineNumber: 1; columnNumber: 9; 不允许有匹配 "[xX][mM][lL]" 的处理指令目标。原因:xml文件的第一代码必须靠左,复制的代码格式对不上就会包这个错误,解决的帮发就是删掉第一行的空格使其右对齐
4.3访问http://127.0.0.1:8080/WebServiceTest/services/HelloServices?wsdl出现异常could not generate WSDL!
AXIS error
Could not generate WSDL!
There is no SOAP service at this location
这个原因是wssd文件中缺少如下红色部分
<?xml version="1.0" encoding="UTF-8"?><deployment xmlns="http://xml.apache.org/axis/wsdd/"xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"><handler type="java:org.apache.axis.handlers.http.URLMapper"name="URLMapper" /><!-- Services from SSOService WSDL service --><service name="HelloServices" provider="java:RPC"><parameter name="className" value="com.sinosoft.webservice.HelloService" /><parameter name="allowedMethods" value="*" /></service><!-- <transport name="http"><requestFlow><handler type="URLMapper" /> </requestFlow> </transport> --></deployment>
- WebService的简单实例
- WebService的简单实例
- 简单的webService实例
- webservice(一)简单的webservice实例
- 创建webservice的简单实例
- 不一样的webService 简单实例
- WebService服务端的简单实例
- WebService客户端的简单实例
- 关于webservice的异步调用简单实例
- 关于webservice的异步调用简单实例
- 关于webservice的异步调用简单实例
- 关于webservice的异步调用简单实例
- 基于Axis的WebService简单实例
- 利用Java编写简单的WebService实例
- 利用Java编写简单的WebService实例
- 利用Java编写简单的WebService实例
- 利用Java编写简单的WebService实例
- 利用Java编写简单的WebService实例
- bootstrap-datetimepicker 日期选择控件 通用版
- 数据结构之散列表(哈希表)
- iOS知识汇总
- Android开发倒计秒数的正确用法
- Android距离传感调试与input子系统探究
- 简单的webService实例
- POJ1573 Robot Motion (模拟 | 递归)
- listview实现时间轴显示效果
- 安转luajit 和 cjson模块
- 微服务中的服务发现
- mysql数据库密码重置_忘记密码_修改密码_破解密码
- java正则匹配替换字符串中ip格式的字符串
- 问题大全二
- 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别