`
IT民工%
  • 浏览: 46336 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

web service 问题收集

 
阅读更多

转载自:http://www.educity.cn/wenda/147229.html

jax-ws WebService相关问题(一)

  1.使用JDK6自带的JAX-WS + Jboss4.2.3 开发WebService发布WebService报错? java.lang.ClassNotFoundException: com.sun.xml.ws.transport.

   解释:JDK本身不带基于Servlet的代码,自带的jax-ws 不带WSServlet和WSServletContextListener两个类,在j2ee的jar包里才有

  解决方案:

  a.使用代码中Endpoint.publish()发布(轻量级HTTP Server);

  Endpoint.publish("http://localhost:8080/HelloService", new HelloSEI());

  缺点是每次代码发布很麻烦,修改也麻烦,而且每个IP和端口只能发布一个

  b.使用Spring自带的SimpleJaxWsServiceExporter发布(轻量级HTTP Server);

  <bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter"> <property name="baseAddress" value="http://localhost:8080/"/> </bean> <bean id="accountServiceEndpoint" class="example.AccountServiceEndpoint"> ... </bean>

  缺点是每个IP和端口只能发布一个

   c.使用jaxws-spring.jar提供的WSSpringServlet方式发布(Servlet发布):

  这需要使用到2个额外的jar包:

  jaxws-spring-1.8.jar

  xbean-spring-v2-2.8.jar

  配置方式:

  web.xml

  <web-app> <!-- this is for Spring --> <listener> <listener-class>org.springframeworntext.ContextLoaderListener</listener-class> </listener> <!-- these are for JAX-WS --> <servlet> <servlet-name>jaxws-servlet</servlet-name> <servlet-class>com.sun.xml.ws.transport.;/servlet-class> </servlet> <servlet-mapping> <servlet-name>jaxws-servlet</servlet-name> <url-pattern>/add</url-pattern> </servlet-mapping> ... if you deploy more services, you might need more <servlet-mapping>s ... </web-app>

  applicationContext.xml

  <beans xmlns="" xmlns:xsi="" xmlns:ws="" xmlns:wss="" xsi:schemaLocation=" g/core "> <wss:binding url="/add" service="#addService" /> <wss:binding url="/sub"> <wss:service><!-- nested bean is of course fine --> <ws:service bean="#myService" /> </wss:service> </wss:binding> <!-- this bean implements web service methods --> <bean id="myService" class="foo.MyService" /> <!-- simplest definition only needs the class name --> <ws:service id="addService" impl="foo.MyAddService" handlers="#myHandler"/> <bean id="myHandler" class="foo.MyHandler" /> </beans>

  2.Client端同样部署在jboss web容器上的时候,客户端调用报: java.lang.ClassCastException: com.sun.xml.ws.client.WSServiceDelegate cannot be cast to javax.xml.ws.spi.ServiceDelegate21

  解释: 这是由于JBOSS有自带的jax-ws api的实现,称为jbossws。导致api类实现冲突。

  解决方案:

  思路是将JDK总的JAX-WS实现相关的类替换为加载JBOSS的JAX-WS API实现类。

  做法是将jboss/lib/endorsed/ 目录下的:

  jboss-jaxrpc.jar

  jboss-jaxws.jar

  jboss-jaxws-ext.jar

  jboss-saaj.jar

  xercesImpl.jar

  拷贝到%JAVA_HOME%/jre/endorsed/目录下。(这使用了JDK的endorsed机制,请查阅相关资料)

  JDK的endorsed目录可以根据System.getProperty("java.endorsed.dirs")获得。 需要注意的是:在web容器使用哪个JDK就在那个JDK下面去修改。

  3.发布的wsdl里面如果import 了wsdl和xsd文件时,客户端访问每次都会Addressing,如何将本地war包里面的xsd和wsdl和发布的服务绑定上?

  解释:这个是由于WS的机制造成的,JAX-WS官方提供了解决方案。

  解决方案:采用添加jax-ws-catalog的方式,绑定本地的xsd和wsdl

  <catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer=" system"> < system systemId=" " uri="HelloService.wsdl"/> </catalog>

  Jax-ws-catalog.xml的放置位置:

  wsimport 命令行或者ant任务

  使用-catalog 可选参数,指定catalog file. 例如:

  -catalog jax-ws-catalog.xml

  WebService客户端运行时环境

  Classpath下的该目录:META-INF/jax-ws-catalog.xml

  (.jar包中的META-INF/jax-ws-catalog.xml也算)

  轻量级的基于HTTP server (j2se)的endpoint发布

  就是说是通过调用接口EndPoint.publish(),并指定了HttpServer的。

  包括通过Spring的轻量级发布辅助类发布的:

  org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter

  org.springframework.remoting.jaxws.SimpleHttpServerJaxWsServiceExporter

  Classpath下的该目录:META-INF/jax-ws-catalog.xml

  基于Servlet的endpoint

  WEB-INF/jax-ws-catalog.xml

  基于JSR 109标准的 EJB 模块发布

  META-INF/jax-ws-catalog.xml

  笔者在使用CXF作为webservice实现的时候通过指定jax-ws-catalog.xml是能够很好的被加载解析。但是使用JDK自带的jax-ws或者Metro jax-ws RI时,使用JBOSS作为发布容器,始终不能正确执行jax-ws-catalog.xml中描述的 import wsdl/xsdschema引用替换,进一步调试发现是通过jndi的方式访问了jax-ws-catalog.xml,但是没达到使用本地wsdl/xsd的效果

  4.如何采用endpoint的方式发布一个servcename下有多个portname的WebService

  how to publish multi port webservice with same serviceName

  解释:一般看JAX-WS RI上的例子或者Spring的两个http Stand alone publish 发布辅助类(上文提到的:Spring的轻量级发布辅助类),都看不到这方面的资料。是因为多 port 使用的比较少。

  解决方案:扩展Spring提供的http endpoint pubish类 :AbstractJaxWsServiceExporter。

  该类胡自动解析带有@WebService注解的初始化为Spring bean了的endpoint发布类,并基于配置的basepath进行发布,发布地址:http://hostname:port/basepath/serviceName/portName

  代码:

  import java.net.InetSocketAddress; import java.util.List; import javax.jws.WebService; import javax.xml.ws.Endpoint; import javax.xml.ws.WebServiceProvider; import ormons.logging.Log; import ormons.logging.LogFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.remoting.jaxws.AbstractJaxWsServiceExporter; import co.; import co.; import co.; import co.; public class PortableHttpServerJaxWsServiceExporter extends AbstractJaxWsServiceExporter { private static final Logger LOG = LoggerFactory.getLogger(PortableHttpServerJaxWsServiceExporter.class); public PortableHttpServerJaxWsServiceExporter() { port = 8080; backlog = -1; shutdownDelay = 0; basePath = "/"; localServer = false; } public void setServer(HttpServer server) { this.server = server; } public void setPort(int port) { this.port = port; } public void setHostname(String hostname) { this.hostname = hostname; } public void setBacklog(int backlog) { this.backlog = backlog; } public void setShutdownDelay(int shutdownDelay) { this.shutdownDelay = shutdownDelay; } public void setBasePath(String basePath) { this.basePath = basePath; } public void setFilters(List<Filter> filters) { this.filters = filters; } public void setAuthenticator(Authenticator authenticator) { this.authenticator = authenticator; } @Override public void afterPropertiesSet() throws Exception { if (server == null) { InetSocketAddress address = (hostname == null new InetSocketAddress( port) : new InetSocketAddress(hostname, port)); server = HttpServer.create(address, backlog); if (logger.isInfoEnabled()) logger.info((new StringBuilder( "Starting HttpServer at address ")).append(address) .toString()); server.start(); localServer = true; LOG.info("Start hostname: {}, port: {}", hostname, port); } super.afterPropertiesSet(); } @Override protected void publishEndpoint(Endpoint endpoint, WebService annotation) { endpoint.publish(buildHttpContext(endpoint, annotation.serviceName(), annotation.portName())); } @Override protected void publishEndpoint(Endpoint endpoint, WebServiceProvider annotation) { endpoint.publish(buildHttpContext(endpoint, annotation.serviceName(), annotation.portName())); } protected HttpContext buildHttpContext(Endpoint endpoint, String serviceName, String portName) { String fullPath = calculateEndpointPath(endpoint, serviceName, portName); HttpContext (fullPath); if (filters != null) ().addAll(filters); if (authenticator != null) (authenticator); LOG.info("Listen http context at full path : {}.", ()); return httpContext; } protected String calculateEndpointPath(Endpoint endpoint, String serviceName, String portName) { if (null == portName) { return (new StringBuilder(String.valueOf(basePath))).append( serviceName).toString(); } return (new StringBuilder(String.valueOf(basePath))) .append(serviceName).append("/").append(portName).toString(); } @Override public void destroy( { super.destroy(); if (localServer) { logger.info("Stopping HttpServer"); server.stop(shutdownDelay); } } protected final Log logger = LogFactory.getLog(getClass()); private HttpServer server; private int port; private String hostname; private int backlog; private int shutdownDelay; private String basePath; private List<Filter> filters; private Authenticator authenticator; private boolean localServer; }

  发布方式:

  <bean class="com.huawei.ossj.ws.publisher.PortableHttpServerJaxWsServiceExporter"> <property name="basePath" value="/" /> <property name="port" value="19900" /> </bean>

分享到:
评论

相关推荐

    vmware vSphere web service SDK开发指南

    整个VMware vSphere Web Service SDK开发指南详细介绍了开发VMware vSphere Web Service SDK应用程序所需的全部知识点,覆盖了从安装配置、认证授权到数据操作、属性收集和客户端应用开发的方方面面。通过学习这份...

    Java web Service性能监视

    Java Web Service性能监视是针对基于Java的Web服务应用程序的性能监控过程,主要目的是确保系统高效稳定运行,并在问题出现时能够快速定位和解决。在大型企业如电信或移动级别公司的运营中,数据库管理员(DBA)的...

    使用Web Service方法发送Web邮件

    本教程将专注于使用Web Service方法发送Web邮件,这是一个实用的技术,尤其适用于自动化任务或跨平台通信。我们将探讨相关的核心概念和技术,以及如何利用这些知识来实现邮件发送功能。 首先,Web Service是一种...

    开发高性能的Web Service应用

    【开发高性能的Web Service应用】 在当今的互联网时代,Web Service作为分布式系统间通信的一种标准方式,被广泛应用于各种业务场景。开发高性能的Web Service应用是确保系统稳定、响应快速的关键,这涉及到多个...

    MyEclipse+xFire开发Web Service

    向导分为三个步骤:第一步收集Web项目配置信息,第二步配置xFire细节,第三步在构建路径中添加必要的xFire类库。 在向导的第一步中,你需要为新的Web服务工程输入项目名称。在第二步,向导会默认设置xFireServlet和...

    web service监测代码

    在本“Web服务监测代码”中,我们将探讨如何实现对Web服务的监控,以便于了解其运行状态、性能以及可能的问题。 1. **Web服务监控的重要性**:Web服务是企业级应用集成的关键组件,它们使得不同系统间的数据交换...

    Web Service Search on Large Scale

    ### Web Service Search on Large Scale #### 引言与背景 随着互联网的发展,万维网(Web)正在经历从数据的集合向服务的集合转变的过程。这意味着互联网不仅仅是静态文档的汇集,而是越来越多地成为各种Web服务的...

    web-service多层分布式系统在录井中的应用.doc

    【Web Service多层分布式系统在录井中的应用】 在现代石油勘探领域,录井是一项至关重要的技术,它涉及收集和分析钻井过程中地层的信息。随着信息技术的发展,Web Service技术被广泛应用到录井系统的实现中,构建了...

    Web Service通用客户端和测试工具

    1. **Web Service定义与作用** - Web服务是一种开放标准(XML、WSDL、UDDI),使应用程序可以相互通信。 - 它们用于构建分布式系统,使得不同组织和系统的组件能够协同工作,实现数据共享和功能集成。 2. **SOAP...

    Web+Service并发系统的设计与研究.pdf

    这种设计不仅能够有效解决现有Web Service面临的性能瓶颈问题,还能更好地适应未来复杂应用的需求。此外,这种模型对于改造现有的企业级Web Service系统具有很好的适应性,有望成为未来Web Service架构设计的一个...

    WebServices开发文档[收集].pdf

    - 当Web Service出现问题时,日志记录和调试工具是定位问题的关键。开发者需要查看服务器端的日志输出,同时利用TCP Monitor等工具查看网络通信细节,找出导致问题的原因。 5. **使用Web Service**: - 客户端...

    基于移动互联网和Web Service的智能农业系统.pdf

    【基于移动互联网和Web Service的智能农业系统】 摘要中提到的智能农业系统是结合现代信息技术,特别是移动互联网和Web Service技术,旨在提升农业管理的智能化水平。系统利用ZigBee技术建立无线传感器网络(WSN)...

    web service

    提供了几本web service方面的应用书,可以给不少初学者在资料搜集方面提供便利

    车票联网查询系统Web Service提供接口的方式实现

    日志收集和分析工具(如ELK Stack)有助于快速定位问题。同时,备份与恢复策略应确保在系统故障时能够快速恢复服务。 8. **安全性审计**:定期的安全审计可以帮助发现潜在的安全风险,及时修补漏洞。此外,符合行业...

    藏经阁-WEB SERVICE EFFICIENCY AT INSTAGRAM.pdf

    【藏经阁-WEB SERVICE EFFICIENCY AT INSTAGRAM.pdf】是关于Instagram在2017年QCon北京会议上分享的关于提升Web服务效率的主题。本文主要探讨了Instagram的架构、效率工具、优化案例以及如何定义和量化效率,并介绍...

    行业分类-设备装置-基于WEB-SERVICE的建设电网统一数据平台的方法.zip

    在电力行业中,WEB-SERVICE被广泛应用于构建数据集成平台,以解决信息孤岛问题,提升数据的流动性和利用率。 建设电网统一数据平台的核心目标是实现数据的标准化、集中化管理。这包括以下几个方面: 1. 数据整合:...

Global site tag (gtag.js) - Google Analytics