java 自带的urlconnection与现在流行的一些框架比如cxf,cxf与axis22都调用webservice,

10532人阅读
  CXF和Axis2是目前java平台上最主流的两个框架,虽然两个项目都隶属ASF,但却是基于不同思想和风格实现的,因此也各有所长。
是由过去的Celtix和XFire两个框架合并而来,CXF在java社区有广泛的接受度是得益于它能很好的集成Spring。我认为CXF最突出的两个优势是:
1.对JAX-WS规范的完整实现。
作为java平台上的WebService标准,过去既有的WebService产品必然会向这一标准靠拢,而JAX-WS标准本身大大地降低了开发WebService的工作量,对于开发人员来说,是非常受欢迎的。
2.对Spring的友好支持。
CXF从Xfire继承而来,对Spring有着非常友好的支持。鉴于Spring的广泛应用,对很多团队来说这是非常有吸引力的一点。
  Axis2:
与CXF这类嵌入式的框架相比,Axis2更像是一种是WS容器,它要求应用程序以aar包的形式部署到自己里面,这对于既有系统,特别是那些基于servlet容器的web应用来说,改造的代价可能会很大。Axis2的优势在于一方面它对WS-*协议族的支持比较全面,另一方面是它还支持C平台,这是一个值得我们关注的优势。
  总得来说,如果是新生项目,选择CXF或Axis2在工作量上不会有太大的差别,对于那些使用了Spring的既有项目来说,CXF应该是首选,因为CXF是基于注解的。因此对于那些基于jvm1.4构建陈旧系统可能并不适用。Axis2的优势是支持C平台和比较全的WS-*协议族。(以上的考量都还没有考虑ESB的因素。)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2220298次
积分:22692
积分:22692
排名:第184名
原创:255篇
评论:449条
架构师,CSDN博客专家,目前正从事大数据领域的研究和开发工作,对企业级应用架构、分布式存储、SaaS和领域驱动设计有丰富的实践经验,喜欢摄影和旅行。
文章:12篇
阅读:34725
文章:16篇
阅读:143625
文章:30篇
阅读:183885
阅读:312922
(3)(6)(4)(1)(2)(1)(4)(2)(1)(2)(3)(1)(3)(2)(6)(10)(5)(3)(2)(2)(3)(4)(1)(4)(4)(2)(1)(1)(2)(1)(1)(4)(1)(2)(3)(1)(2)(5)(5)(5)(3)(2)(3)(10)(4)(4)(8)(5)(6)(1)(10)(1)(2)(6)(10)(4)(2)(10)(5)(11)(20)(3)(3)(1)(2)(1)(2)(2)(7)(1)(3)(2)二次元同好交流新大陆
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
Exception in thread "main" org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl. at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:173) at org.apache.cxf.bus.extension.Extension.getClassObject(Extension.java:185) at org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByType(ExtensionManagerImpl.java:138) at org.apache.cxf.bus.extension.ExtensionManagerBus.&init&(ExtensionManagerBus.java:131) at org.apache.cxf.bus.extension.ExtensionManagerBus.&init&(ExtensionManagerBus.java:139) at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:40) at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:36) at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:32) at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:106) at org.apache.cxf.BusFactory.createThreadBus(BusFactory.java:216) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:206) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:193) at org.apache.cxf.frontend.ClientProxyFactoryBean.configureObject(ClientProxyFactoryBean.java:99) at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:131) at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:156) at net.ilkj.soap.server.Client_2.main(Client_2.java:19)Caused by: java.lang.IncompatibleClassChangeError: Implementing class at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:423) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:356) at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:169) ... 15 more此错误初步判断是jar包冲突了,后来查查,原来是jar包版本太低了,换了个高的,搞定!!java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) at java.net.Socket.connect(Socket.java:579) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at mons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140) at mons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125) at mons.httpclient.HttpConnection.open(HttpConnection.java:707) at mons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361) at mons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387) at mons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at mons.httpclient.HttpClient.executeMethod(HttpClient.java:397) at mons.httpclient.HttpClient.executeMethod(HttpClient.java:346) at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:557) at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199) at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76) at org.apache.axis2.monsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400) at org.apache.axis2.monsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:438) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) at net.ilkj.soap.server.IHelloServiceStub.selectMaxLongNameStudent(IHelloServiceStub.java:586) at net.ilkj.soap.server.Client_3.main(Client_3.java:25)org.apache.axis2.AxisFault: Connection refused: connect at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:203) at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:76) at org.apache.axis2.monsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:400) at org.apache.axis2.monsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:225) at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:438) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:402) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) at net.ilkj.soap.server.IHelloServiceStub.selectMaxLongNameStudent(IHelloServiceStub.java:586) at net.ilkj.soap.server.Client_3.main(Client_3.java:25)Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:75) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:337) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:198) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391) at java.net.Socket.connect(Socket.java:579) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at mons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:140) at mons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125) at mons.httpclient.HttpConnection.open(HttpConnection.java:707) at mons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361) at mons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387) at mons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at mons.httpclient.HttpClient.executeMethod(HttpClient.java:397) at mons.httpclient.HttpClient.executeMethod(HttpClient.java:346) at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:557) at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:199) ... 9 more五月 18, :49 下午 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass信息: Creating Service {http://server.soap.ilkj.net/}IHelloService from class net.ilkj.soap.server.IHelloServiceException in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.jaxws.JaxWsConfigurationException: The @javax.jws.WebMethod(exclude=true) cannot be used on a service endpoint interface. Method: excludeMethod at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:369) at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:251) at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:152) at javax.xml.ws.Endpoint.publish(Endpoint.java:240) at net.ilkj.soap.server.SoapServer.main(SoapServer.java:11)Caused by: org.apache.cxf.jaxws.JaxWsConfigurationException: The @javax.jws.WebMethod(exclude=true) cannot be used on a service endpoint interface. Method: excludeMethod at org.apache.cxf.jaxws.support.JaxWsServiceConfiguration.isOperation(JaxWsServiceConfiguration.java:194) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.isValidMethod(ReflectionServiceFactoryBean.java:1940) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.createInterface(ReflectionServiceFactoryBean.java:983) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:469) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:690) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:540) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:252) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:205) at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102) at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:159) at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:211) at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:454) at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:334) ... 4 more这错误就是说我在service中的一个方法,不被公开为web服务,我是这样写的:@WebMethod(exclude=true)public void excludeMethod();但是它报错?不知道为什么,@WebService中的方法都必须要公开为服务吗,不是吧?求解决方案!!Exception in thread "main" java.lang.NoSuchMethodError: org.mons.schema.XmlSchemaCollection.read(Lorg/w3c/dom/DLjava/lang/S)Lorg/apache/ws/commons/schema/XmlS at org.mon.xmlschema.SchemaCollection.read(SchemaCollection.java:133) at org.apache.cxf.databinding.AbstractDataBinding.addSchemaDocument(AbstractDataBinding.java:192) at org.apache.cxf.databinding.AbstractDataBinding.addSchemaDocument(AbstractDataBinding.java:95) at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:388) at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:478) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:690) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:540) at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:252) at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:205) at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102) at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:159) at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:211) at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:454) at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:334) at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:251) at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:152) at javax.xml.ws.Endpoint.publish(Endpoint.java:240) at net.ilkj.soap.server.SoapServer.main(SoapServer.java:11)它说的是那个类中没有那个方法,这一般就是jar包的版本问题了,所以我换了个,搞定
阅读(4844)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'Axis2---webservice错误分析',
blogAbstract:'log4j:WARN No appenders could be found for logger (org.apache.axis2.jaxws.description.builder.converter.JavaClassToDBCConverter).log4j:WARN Please initialize the log4j system properly.Exception in thread \"main\" java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/mail/internet/ParseException',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:4,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}WebService历来都很受重视,特别是Java阵营,WebService框架和技术层出不穷。知名的XFile(新的如CXF)、Axis1、Axis2等。
  而Sun公司也不甘落后,从早期的JAX-RPC到现在成熟的、支持RPC调用与消息传递的JAX-WS都经过了市场的考验,十分成熟,而且使用JAX-WS开发WebService的收益是很大的,它是轻量级的。
  我们使用JAX-WS开发WebService只需要很简单的几个步骤:写接口和实现=&发布=&生成客户端(测试或使用)。
  而在开发阶段我们也不需要导入外部jar包,因为这些api都是现成的。首先是接口的编写(接口中只需要把类注明为@WebService,把 要暴露给客户端的方法注明为@WebMethod即可,其余如@WebResult、@WebParam等都不是必要的,而客户端和服务端的通信用RPC 和Message-Oriented两种,区别和配置以后再说):
import java.util.D
import javax.jws.WebM
import javax.jws.WebP
import javax.jws.WebR
import javax.jws.WebS
* 作为测试的WebService接口
* @author Johness
@WebService
public interface SayHiService {
* 执行测试的WebService方法
@WebMethod
void SayHiDefault();
* 执行测试的WebService方法(有参)
* @param name
@WebMethod
void SayHi(@WebParam(name = &name&) String name);
* 执行测试的WebService方法(用于时间校验)
* @param clentTime 客户端时间
* @return 0表示时间校验失败 1表示校验成功
@WebMethod
@WebResult(name = &valid&)
int CheckTime(@WebParam(name = &clientTime&) Date clientTime);
&然后是实现类(注解@WebService及其endpointInterface属性是必要的):
package serivce.
import java.text.SimpleDateF
import java.util.D
import javax.jws.WebS
import serivce.SayHiS
* 作为测试的WebService实现类
* @author Johness
@WebService(endpointInterface = &serivce.SayHiService&)
public class SayHiServiceImp implements SayHiService {
public void SayHiDefault() {
System.out.println(&Hi, Johness!&);
public void SayHi(String name) {
System.out.println(&Hi, & + name + &!&);
public int CheckTime(Date clientTime) {
// 精确到秒
String dateServer = new java.sql.Date(System.currentTimeMillis())
.toString()
+ new java.sql.Time(System.currentTimeMillis());
String dateClient = new SimpleDateFormat(&yyyy-MM-dd HH:mm:ss&)
.format(clientTime);
return dateServer.equals(dateClient) ? 1 : 0;
&然后是发布(一般有两种方式):
  方式一(此方式只能作为调试,有以下bug:
    jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在service接口和实现类添加&@SOAPBinding(style = SOAPBinding.Style.RPC)&注解;
    访问受限,似乎只能本机访问(应该会绑定到publish的URL上,如下使用localhost的话就只能本机访问)&&):
import javax.xml.ws.E
import serivce.imp.SayHiServiceI
public class Main {
* 发布WebService
public static void main(String[] args) {
Endpoint.publish(&http://localhost/sayhi/service/sayHi&, new SayHiServiceImp());
&方式二(基于web服务器Servlet方式):
  以Tomcat为例,首先编写sun-jaxws.xml文件并放到WEB-INF下:
&?xml version=&1.0& encoding=&UTF-8&?&
&endpoints xmlns=&/xml/ns/jax-ws/ri/runtime&
version=&2.0&&
&endpoint name=&SayHiService&
implementation=&serivce.imp.SayHiServiceImp&
url-pattern=&/sayHi& /&
&/endpoints&
&然后改动web.xml,添加listener和servlet(url-pattern要相同哦):
&?xml version=&1.0& encoding=&UTF-8&?&
&web-app xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance& xmlns=&/xml/ns/javaee& xmlns:web=&/xml/ns/javaee/web-app_2_5.xsd& xsi:schemaLocation=&/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd& version=&2.5&&
&listener&
&listener-class&
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
&/listener-class&
&/listener&
&servlet-name&SayHiService&/servlet-name&
&servlet-class&
com.sun.xml.ws.transport.http.servlet.WSServlet
&/servlet-class&
&/servlet&
&servlet-mapping&
&servlet-name&SayHiService&/servlet-name&
&url-pattern&/service/sayHi&/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-list&
&/web-app&
&最后部署到Tomcat里,值得一提的是您可能需要添加以下jar包(因为Tomcat没有):
            
  启动Tomcat。
  部署好了之后打开浏览器输入网址:(如果是使用Tomcat别忘了加端口),可以看到东西就证明发布成功了。
  最后是客户端使用,由于WebService是平台和语言无关的基于xml的,所以我们完全可以使用不同语言来编写或生成客户端。以下是在Windows平台下使用jdk自带工具wsimport生成客户端的方式:
  jdk自带的wsimport工具生成,上图我是把客户端文件生成到了桌面src文件中(-d),并保留了源文件(-keep),指定了包名(-p)。
  然后我们就可以使用生成的文件来调用服务器暴露的方法了:
            
    值得一提的是你生成使用的jdk和你客户端的jre需要配套!
  从上面的目录结构我们可以发现:服务端的每个webmethod都被单独解析成为了一个类(如果使用了实体,实体也会被解析到客户端,并且是源码,所以建议使用实体时慎重)。
  而我们的service则被生成了一个代理类来调用服务,接下来我们看看使用情况:
import java.util.D
import java.util.GregorianC
import javax.xml.datatype.DatatypeConfigurationE
import javax.xml.datatype.DatatypeF
import javax.xml.datatype.XMLGregorianC
import org.ahe.webservice.client.SayHiS
import org.ahe.webservice.client.SayHiServiceImpS
public class Main {
* @throws DatatypeConfigurationException
public static void main(String[] args) throws DatatypeConfigurationException {
// 获取service
SayHiService service = new SayHiServiceImpService().getSayHiServiceImpPort();
service.sayHiDefault();
service.sayHi(&Ahe&);
// checktime
// 这里主要说一下时间日期的xml传递,方法还略显复杂
GregorianCalendar calender = new GregorianCalendar();
calender.setTime(new Date(System.currentTimeMillis()));
XMLGregorianCalendar xmldate = DatatypeFactory.newInstance().newXMLGregorianCalendar(calender);
System.out.println(service.checkTime(xmldate));
&看看服务器的输出,我们是否调用成功:
        
    成功了!
    对于校验时间的方法客户端也收到反馈了:
        

我要回帖

更多关于 cxf axis2 比较 的文章

 

随机推荐