- 浏览: 219706 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
cgyong:
报错如下,楼主什么问题呢?谢谢<Exceptio ...
webservice学习二之(1)axis2服务器端方式开发总结(附件含有项目) -
shishiyisheng:
...
Oracle_学习使用SQL语五(统计分组语句) -
iou8854:
eclipse发布地址是什么
webservice学习二之(1)axis2服务器端方式开发总结(附件含有项目) -
andey007518:
感谢分享,好好观摩下
webservice学习二之(1)axis2服务器端方式开发总结(附件含有项目) -
guoqiangi1:
学习了!顺便签到了
window.parent总结
一、首先建一个webservice_portal的web工程
1、工程目录
2、把axis2相关包放到工程lib目录下
二、开发webservice_portal工程
1、开发服务器端代码,如下:
com.smartdot.webservice.service.impl.OMElementUtils.java
2、开发字符串类型转换成OMElement对象的公共类,如下
com.smartdot.util.OMElementUtils
3、开发配置文件,如下:
com.smartdot.webservice.service.META-INF.services.xml
3、开发build进行部署,如下:
其中build参数为:
4、修改web.xml文件,添加如下代码:
到目前为止webservice服务器端已经完成,并客户通过上述build进行编辑部署,以上代码注释均是自己查找资料并在开发中自己理解的,如果有不对的地方,请指教。谢谢。
关于webservice客户端编写请看webservice学习二之2webservice客户端开发
关于附件的说明,由于所需jar包已经超过了10M,所以要分批进行上传,并且还要上传工程,当下载后,将axis1.rar和axis2.rar包中的jar包合并,并且放置文件夹为axis中,再将axis文件夹拷贝到工程lib目录下。webservice_portal.rar为webservice服务器端代码,webservice_client.rar为webservice客户端代码。
1、工程目录
2、把axis2相关包放到工程lib目录下
二、开发webservice_portal工程
1、开发服务器端代码,如下:
com.smartdot.webservice.service.impl.OMElementUtils.java
/** * * This is a part of the smartdot cpms system. * Copyright (C) 2008-2009 Smartdot Corporation * All rights reserved. * * Licensed under the Smartdot private License. * Created on 2009-4-22 * @author YangLin **/ package com.smartdot.webservice.service.impl; import java.util.Iterator; import javax.xml.namespace.QName; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import com.smartdot.util.OMElementUtils; /** * 功能:跨平台登录系统。 * webservice服务器端。主要是接收客户端发送的信息,并进行判断用户是否存在,进而返回succee和failed * @author YangLin * */ public class APIWebService{ /** * 接收客户端的信息,并根据其信息返回是否登录。 * @param userEle * <Y><Z><A>a</A><B>b</B></Z></Y>客户端提交的内容。Y的第一个节点是<Z><A>a</A><B>b</B></Z> * <A>a</A><B>b</B>是Z的子节点。对象的子节点中必须有值。 * 关于服务器解析的内容是根据客户端提交的内容进行解析的。而且其他客户端想要调用服务器端的方法, * 其提交的内容格式必须要相同。 * 假设数据库中存在用户yanglin,密码smartdot. * @return */ public OMElement receiveUser(OMElement userEle){ String xmlInfo = "<state>SUCCESS</state>"; String name=""; String password=""; System.out.println("webservice start ............"); /************开始对客户端传递的内容进行解析。***********/ try{ /** * 此方法提取对象的第一个节点,经过对象.getFirstElement()方法解析后, * 其内容是:<Z><A>a</A><B>b</B></Z>。 * paramElem必须是当前对象只包括子节点对象,否则继续解析。直到只存在子节点对象。 */ OMElement paramElem = userEle.getFirstElement(); //分两种方式解析OMElement对象 //第一种方式遍历子节点对象,集合存放的内容是<A>a</A><B>b</B> Iterator it=paramElem.getChildren(); while(it.hasNext()){ //此对象存放的是<A>a</A>、<B>b</B>内容 OMElement childs=(OMElement)it.next(); if(childs.getLocalName().equals("name")){ name=childs.getText();//得到用户名 } if(childs.getLocalName().equals("password")){ password=childs.getText();//得到用户密码 } } //第二种方式直接查找匹配子节点name属性 OMElement nameElem = paramElem.getFirstChildWithName(new QName("name")); name=nameElem.getText();//得到用户名 OMElement passwordElem = paramElem.getFirstChildWithName(new QName("password")); password=passwordElem.getText();//得到用户密码 if(!name.equals("yanglin") || !password.equals("smartdot")){ xmlInfo = "<state>FAILED</state>"; } }catch(Exception e){ xmlInfo = "<state>FAILED</state>"; } /***************到目前为止已经对客户端传递的内容进行解析。****************/ /************先创建OMElement对象,并将其对象返回客户端*************/ //这个用中文我也不好说 就算是创造了一个工厂吧。 OMFactory fac=OMAbstractFactory.getOMFactory(); //这个是命名空间,实际情况需要看对方给你的wsdl这个值是什么.这是服务器端随便你定义.客户端需要照这个样子传才行。后面那个参数可为空也可以有值。这个东西也好理解调试的时候打印下OMElement 就知道这东西怎么用了。 OMNamespace omNs=fac.createOMNamespace("", ""); //创建元素sayHello,并指定其在omNs指代的名称空间中。 OMElement soapMain=fac.createOMElement("sendClient",omNs); OMElement content=fac.createOMElement("people",omNs); OMElement valueElem=new OMElementUtils().toOMElement(xmlInfo,"UTF-8");//将字符串值转换成OMElement对象 //把一个对象放入另一个对象,valueElem就是content的子结点。 content.addChild(valueElem); soapMain.addChild(content); System.out.println("webservice end ............"); /********************创建OMElement对象完毕,并将其对象返回客户端*******************/ return soapMain; } }
2、开发字符串类型转换成OMElement对象的公共类,如下
com.smartdot.util.OMElementUtils
/** * * This is a part of the smartdot cpms system. * Copyright (C) 2008-2009 Smartdot Corporation * All rights reserved. * * Licensed under the Smartdot private License. * Created on 2009-4-22 * @author YangLin **/ package com.smartdot.util; import java.io.ByteArrayInputStream; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.impl.builder.StAXOMBuilder; public class OMElementUtils { // 将xml字符创解析成OMElement对象。 public OMElement toOMElement(String xmlStr, String encoding) { OMElement xmlValue; try { xmlValue = new StAXOMBuilder(new ByteArrayInputStream(xmlStr .getBytes(encoding))).getDocumentElement(); return xmlValue; } catch (Exception e) { return null; } } }
3、开发配置文件,如下:
com.smartdot.webservice.service.META-INF.services.xml
<serviceGroup> <!--下面定义服务名,当在url访问时用到此服务名--> <service name="APIWebService" scope="soapsession"> <description></description> <!--ServiceClass指定Java Class的位置,即实现服务的类。 --> <parameter name="ServiceClass" locked="xsd:false"> com.smartdot.webservice.service.impl.APIWebService </parameter> <!--operation 与Java Class中方法名对应 --> <operation name="receiveUser"> <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" /> <actionMapping>urn:receiveUser</actionMapping> </operation> </service> </serviceGroup>
3、开发build进行部署,如下:
<?xml version="1.0" encoding="UTF-8"?> <project default="compile" basedir="." name="webservice_portal"> <description> 一段描述信息,没有实际作用。 </description> <property name="build.debug" value="on" /> <property name="build.debuglevel" value="lines,vars,source" /> <property name="build.optimize" value="off" /> <property name="build.deprecation" value="off" /> <property name="build.source" value="1.4" /> <property name="src" value="src" /> <property name="dest" value="build"/> <property name="dist" value="dist"/> <property name="lib.dir" location="lib" /> <property name="testant_jar" value="testant.jar" /> <property name="product.jar.name" value="${project.name}.jar" /> <property name="product.war.name" value="${project.name}.war" /> <target name="init" description="在元素中指定描述信息"> <echo message="这里的信息将被输出到控制台!"/> <mkdir dir="${dest}"/> <mkdir dir="${dist}"/> <mkdir dir="${dest}/src" /> <mkdir dir="${dest}/webdocs" /> </target> <target name="clean"> <delete dir="${dest}" /> <delete dir="${dist}" /> </target> <path id="compile.path"> <fileset dir="${lib.dir}"> <include name="**/*jar" /> </fileset> </path> <target name="compile" depends="init"> <javac srcdir="${src}" destdir="${dest}/src" debug="${build.debug}" debuglevel="${build.debuglevel}" optimize="${build.optimize}" deprecation="${build.deprecation}" source="${build.source}"> <!--classpath:表示编译类所需的jar包的位置--> <classpath> <path refid="compile.path" /> </classpath> </javac> <copy todir="build/src" overwrite="true"> <fileset dir="${src}"> <include name="**/*.xml" /> </fileset> </copy> <copy todir="${dest}/webdocs" overwrite="true"> <fileset dir="WebContent"> <include name="**/*" /> </fileset> </copy> </target> <!--将项目源文件打jar包--> <target name="create-jar" depends="compile"> <echo message="将项目源文件打包jar!"/> <jar jarfile="${dist}/${product.jar.name}"> <fileset dir="${dest}/src"> <include name="**/*" /> </fileset> </jar> <jar destfile="${dist}/APIWebService.aar"> <metainf dir="${dest}/src/com/smartdot/webservice/service/META-INF"> <include name="services.xml" /> </metainf> </jar> </target> <!--将项目源文件打war包--> <target name="dist-war" depends="clean,init,compile,create-jar"> <war destfile="${dist}/${product.war.name}"> <fileset dir="${dest}/webdocs"> </fileset> </war> </target> <!--将jar,war包导入到jboss制定路径--> <target name="copy-war-to-jboss" depends="clean,init,compile,create-jar,dist-war"> <echo message="将编译的和导入的jar包导入到jboss下的server/default/lib目录下"/> <copy todir="${jboss.home}/server/default/lib" overwrite="true"> <fileset dir="${dist}" includes="*.jar" /> <fileset dir="${lib.dir}" includes="*.jar" /> </copy> <echo message="删除历史的war包"/> <delete dir="${jboss.home}/server/default/deploy/${product.war.name}" /> <echo message="将打成的war包拷贝到server/default/deploy目录下"/> <copy todir="${jboss.home}/server/default/deploy" overwrite="true"> <fileset dir="${dist}" includes="${product.war.name}" /> </copy> </target> <!--将jar、war包导入到jboss制定目录,但是和上面的方式不同,不同之处是上面的方法是将war包拷贝到jboss制定目录, 而现在先创建一个文件夹(*.war),再将${dest}/webdocs下的内容拷贝到这个文件夹下--> <target name="copy-dir-to-jboss" depends="clean,init,compile,create-jar"> <echo message="将编译的和导入的jar包导入到jboss下的server/default/lib目录下"/> <copy todir="${jboss.home}/server/default/lib" overwrite="true"> <fileset dir="${dist}" includes="*.jar" /> <fileset dir="${lib.dir}" includes="*.jar" /> <fileset dir="${lib.dir}/axis" includes="*.jar" /> </copy> <echo message="删除历史的war包"/> <delete dir="${jboss.home}/server/default/deploy/${product.war.name}" /> <echo message="再将${dest}/webdocs下的内容拷贝到server/default/deploy/${product.war.name}目录下"/> <copy todir="${jboss.home}/server/default/deploy/${product.war.name}" overwrite="true"> <fileset dir="${dest}/webdocs" includes="**/*" /> </copy> <copy todir="${jboss.home}/server/default/deploy/${product.war.name}/WEB-INF/services" overwrite="true"> <fileset dir="${dist}" includes="*.aar" /> </copy> </target> </project>
其中build参数为:
-Das.type=jboss -Djboss.home=D:\jboss-4.0.2_webservice_portal -Dproject.name=webservice_portal
4、修改web.xml文件,添加如下代码:
<servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class> org.apache.axis2.transport.http.AxisServlet </servlet-class> <load-on-startup>1</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>
到目前为止webservice服务器端已经完成,并客户通过上述build进行编辑部署,以上代码注释均是自己查找资料并在开发中自己理解的,如果有不对的地方,请指教。谢谢。
关于webservice客户端编写请看webservice学习二之2webservice客户端开发
关于附件的说明,由于所需jar包已经超过了10M,所以要分批进行上传,并且还要上传工程,当下载后,将axis1.rar和axis2.rar包中的jar包合并,并且放置文件夹为axis中,再将axis文件夹拷贝到工程lib目录下。webservice_portal.rar为webservice服务器端代码,webservice_client.rar为webservice客户端代码。
- webservice_portal.rar (23.8 KB)
- 下载次数: 727
- webservice_client.rar (6.4 KB)
- 下载次数: 533
- axis2.rar (3.6 MB)
- 下载次数: 650
- axis1.rar (7.3 MB)
- 下载次数: 493
评论
7 楼
cgyong
2015-07-08
报错如下,楼主什么问题呢?谢谢
<Exception>
org.apache.axis2.AxisFault: The service cannot be found for the endpoint reference (EPR) /webservice_portal/services/APIWebService
at org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:45)
at org.apache.axis2.engine.Phase.invoke(Phase.java:399)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:203)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:131)
at org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:122)
at org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:116)
at org.apache.axis2.transport.http.AxisServlet$ProcessRESTRequest.processURLRequest(AxisServlet.java:776)
at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:744)
</Exception>
<Exception>
org.apache.axis2.AxisFault: The service cannot be found for the endpoint reference (EPR) /webservice_portal/services/APIWebService
at org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:45)
at org.apache.axis2.engine.Phase.invoke(Phase.java:399)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:203)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:131)
at org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:122)
at org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:116)
at org.apache.axis2.transport.http.AxisServlet$ProcessRESTRequest.processURLRequest(AxisServlet.java:776)
at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:744)
</Exception>
6 楼
iou8854
2014-09-23
eclipse发布地址是什么
5 楼
andey007518
2014-03-27
感谢分享,好好观摩下
4 楼
gaoshuai2772
2012-04-13
真是好人啊 太好了
3 楼
yueai22
2012-02-21
感谢楼主分享。。。项目正需要学这个。。。太感谢了。。
2 楼
liuqimeng1
2011-01-04
太好的文章,我正要学这个,能写出来这么好的帖子,让我仔细看下,
另外,再顶......
另外,再顶......
1 楼
xingyuezy
2010-04-14
这么多人下载了,这么不知道言谢啊!
谢谢楼主分享
谢谢楼主分享
相关推荐
WebService服务器端实例主要涉及到的是基于开放标准的网络通信技术,用于不同系统间的互操作性。在Web服务的世界里,WebService是一种允许应用程序通过互联网交换数据的方式。它基于XML(可扩展标记语言)进行数据...
Axis提供了一套完整的Java API,使得开发者能够方便地构建Web服务客户端和服务器端。它支持SOAP(简单对象访问协议)、WSDL(Web服务描述语言)和XML(可扩展标记语言)等标准,从而促进跨平台的互操作性。 在标题...
标题中的“详解axis调用webservice实例”表明我们将探讨如何使用Apache Axis库来调用Web服务。Apache Axis是一个开源工具,它允许Java开发者创建、部署和使用Web服务。在这个实例中,我们会有机会看到实际的Java代码...
它提供Web服务客户端和服务器端的基础支持。 2. **jaxrpc.jar**:Java API for XML-RPC,是Java中处理RPC风格的Web服务的标准API。它提供了客户端和服务端的实现,使得开发者可以使用Java方法调用远程Web服务。 3....
而Axis是Apache软件基金会的一个开源项目,专门用于实现SOAP Web服务的客户端和服务器端工具。本篇文章将深入探讨使用Axis开发Web服务时涉及的核心知识点,以及如何利用提供的jar包来实现这一目标。 首先,让我们...
使用这些jar文件,开发者可以构建Web服务客户端和服务器端,处理SOAP消息,以及生成和解析WSDL文件。在旧版本的AXIS中,开发者通常需要手动配置这些依赖项,而现在许多现代的构建工具如Maven或Gradle可以自动化这个...
2. **Web服务服务器端实现**: Axis支持动态Web服务发布,可以从Java类或接口直接生成服务端代码,简化了服务端开发过程。 3. **SOAP处理**: Axis处理SOAP(简单对象访问协议)消息,这是Web服务之间通信的标准...
在Axis1.4版本中,包含了所有必要的jar文件,这些文件是实现Web服务客户端和服务器端功能的核心组件。 描述中提到的“用于调用webservice接口所需”,意味着这个压缩包中的jar文件是开发人员在与Web服务交互时必须...
1. `axis.jar`:核心库,包含了处理SOAP消息、WSDL解析和Web服务客户端/服务器端功能的基础组件。 2. `jaxrpc.jar`:JAX-RPC(Java API for XML-based RPC)库,是Java平台上用于处理RPC风格Web服务的标准API。 3. `...
它提供了一套完整的工具,包括代码生成器、客户端存根、服务器端处理器等,用于处理SOAP消息。然而,尽管Axis框架通常包含了大部分运行时库,但某些特定功能可能不在其默认发布的zip包中。在这个案例中,提到的...
它定义了客户端和服务器端的接口,使得开发Web服务变得简单。 8. **saaj-api-1.3.jar**:SOAP with Attachments API for Java (SAAJ) 是处理SOAP消息的标准API,包括SOAP头和SOAP附件。它允许程序与SOAP消息进行...
通过以上知识点的总结,可以看出Borland JBuilder 2006是一款功能强大的开发工具,尤其适合那些希望利用网络服务技术的企业和开发者。无论是在创建还是使用网络服务方面,该工具都提供了丰富的支持和便利的功能。