在开发webservice的时候,我们需要加入自己的控制逻辑,自定义过滤器,对soap消息进行处理,或者是预先进行一些设置,等等。首先介绍一下如何自定义处理类逻辑。
基于JAS-WS有一个重要的文件,sun.jaxws.xml,这个文件是用来定义服务的处理类的,就好比web.xml一样,我们访问某个业务处理,是由哪一个servlet处理一样。
OK,先看文件。
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
<endpoint name="hotel" interface="com.xmlapi.shop.hotel.v1.HotelShopPortType" implementation="com.shopsvc.webservices.hotel.HotelShopSoapServiceImpl" binding="http://www.w3.org/2003/05/soap/bindings/HTTP/" url-pattern="/soap/hotel/v1/*" service="{urn:com:xmlapi:shop:hotel:v1}HotelShopService" port="{urn:com:xmlapi:shop:hotel:v1}HotelShopPort" wsdl="WEB-INF/wsdl/com.xmlapi.shop.hotel.v1.wsdl">
<javaee:handler-chains xmlns:javaee="http://java.sun.com/xml/ns/javaee">
<javaee:handler-chain>
<javaee:handler>
<javaee:handler-class>com.shopsvc.soap.InboundHandler</javaee:handler-class>
</javaee:handler>
<javaee:handler>
<javaee:handler-class>com.shopsvc.soap.OutboundHandler</javaee:handler-class>
</javaee:handler>
</javaee:handler-chain>
</javaee:handler-chains>
</endpoint>
</endpoints>
从这个文件我们自定义了2个handle来处理我们的请求和响应。包括当前提供的服务,处理那些url。
接下来我们看看handle类的结构。
public abstract class BaseProtocolHandler implements SOAPHandler<SOAPMessageContext>
{
/**
*
* @param smc context of SOAP request message
*/
abstract void handleRequest(SOAPMessageContext smc);
/**
*
* @param smc context of SOAP response message
*/
abstract void handleResponse(SOAPMessageContext smc);
/**
* Passes message handling down to the EWS filter manager.
*/
public boolean handleMessage(SOAPMessageContext smc)
{
if (smc == null)
{
SoapUtils.createInternalErrorException();
}
Object objectOutbound = smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
if (objectOutbound == null || objectOutbound.getClass() != Boolean.class)
{
SoapUtils.createInternalErrorException();
}
boolean direction = (Boolean)objectOutbound;
if (direction == FilterChain.INBOUND_DIRECTION)
{
this.handleRequest(smc);
}
else
{
this.handleResponse(smc);
}
// Returning true tells JAX-WS that it should not stop calling other handlers in
// the chain. Returning false would stop calling the remaining handlers if any.
return true;
}
/**
* Passes fault handling down to the filter manager.
*/
public boolean handleFault(SOAPMessageContext smc)
{
smc.put(EwsSoapUtils.IS_FAULT_RESPONSE_KEY, true);
this.handleResponse(smc);
return true;
}
/**
* Informs JAX-WS what headers will understand.
*
* This is necessary to be able to process Security header that comes
* with mustUnderstand="true" attribute.
*
* @see javax.xml.ws.handler.soap.SOAPHandler#getHeaders()
*/
public Set<QName> getHeaders()
{
HashSet<QName> headers = new HashSet<QName>();
headers.add(new QName(
"http://schemas.xmlsoap.org/ws/2002/12/secext",
"Security", ""));
// This is to support .NET WSE 3.0 security.
headers.add(new QName(
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
"Security", ""));
return headers;
}
这是大体的逻辑框架,当服务进入的时候,首先会进入我们的handleMessage,然后去调用handleRequest or response.
这只是父类的实现,接下来我们继续讲子类的实现,以及自定义过滤器的运用。
分享到:
相关推荐
本篇将深入讲解如何基于JAX-WS开发一个WebService实例。 首先,让我们了解JAX-WS的基本概念。JAX-WS提供了一种简单的方式来创建SOAP(Simple Object Access Protocol)Web服务,它集成了Java SE和Java EE平台,使得...
基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...
JAX-WS取代了早期的JAX-RPC(Java API for XML-based RPC),提供了一个更加现代、轻量级且基于标准的框架。 1. **SOAP与Web服务** SOAP(简单对象访问协议)是一种基于XML的协议,用于交换结构化的信息。Web服务...
这个压缩包是针对Java开发者设计的,用于帮助他们理解和实践基于JAX-WS的Web服务开发。 【描述】中提到的“jax-ws开发dome”,这里的“dome”很可能是指“demo”,即示例项目。这表明压缩包内包含了演示如何使用JAX...
Java API for XML Web Services(JAX-WS)是Java平台上用于构建和消费Web服务的标准API。它简化了创建和使用Web服务的过程,使得开发者能够通过SOAP消息与远程服务进行交互。JAX-WS允许开发者将服务接口直接映射到...
在"浔阳江上 - BlogJava.htm"和"MyEclipse6_5上基于JAX-WS开发Webservice(中文示例) - 浔阳江上 - BlogJava_files"这两个文件中,可能包含了作者在BlogJava网站上分享的具体步骤和示例代码,帮助读者更好地理解和...
使用 Eclipse JavaEE 开发 WebService 时,若选择手动创建原生的JAX-WS服务,需要导入此jar资源(教程详见我的博文https://blog.csdn.net/weixin_50604409/article/details/116399530)。 如果您同时装有 IntelliJ ...
JAX-WS(Java API for XML Web Services)是Java平台标准版(Java SE)和企业版(Java EE)的一部分,它为创建、部署和消费基于SOAP(Simple Object Access Protocol)的Web服务提供了全面的支持。JAX-WS允许开发者...
使用JAX-WS,你可以通过添加注解(如`@WebService`)或使用XML配置文件来部署服务。对于简单的应用,注解方式更常见。例如,部署到Tomcat服务器时,只需确保服务类位于正确的包结构中,然后启动服务器。 ### 4. ...
Java 基于第三方插件实现WebService实在麻烦,尤其是要添加几十M的Jar包,有时还会导致项目冲突。还好,自从JDK 1.6开始,Java自身已经支持WebSeervice的开发即JAX-WS,附件是一个简单的示例,供入门参考。注意,JDK...
3. **生成WSDL**:使用JAX-WS工具(如`wsimport`)自动生成WSDL文件,基于SEI接口。 4. **部署服务**:将实现类和WSDL部署到应用服务器,例如Tomcat或Jetty。 5. **生成客户端代理**:客户端使用`wsimport`工具或`...
【标题】"MyEclipse基于JAX-WS开发Webservice+WebserviceClient客户端调用" 涉及到的关键技术主要包括MyEclipse集成开发环境、JAX-WS规范、Web服务(Webservice)以及客户端调用。下面将详细介绍这些概念及其相互...
通过定义服务接口,实现服务逻辑,以及使用`Endpoint.publish()`发布服务,我们可以轻松地创建一个基于JAX-WS的Web服务。同时,利用`wsimport`工具生成客户端代码,可以方便地进行服务调用。在"jax-ws-server"和"jax...
MyEclipse8_0中使用 JAX-WS 部署 WebService 实例 - 外衣 - 博客频道 - CSDN_NET.mht
JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用,JAX-WS方式开发和部署webservice应用
这个"jax-ws WebService客户端与服务端工程.rar"压缩包文件包含了一个完整的示例,展示了如何使用JAX-WS创建和消费Web服务。让我们深入探讨一下JAX-WS的核心概念和技术。 1. **Web服务基础**: - **SOAP(Simple ...
JAX-WS 2.2 RI 所包含的JAR包集合,包含25个JAR包,列表如下: FastInoset.jar gmbal-api-only.jar ha-api.jar javax.annotation.jar javax.mail_1.4.jar jaxb-api.jar jaxb-impl.jar jaxb-xjc.jar jaxws-api...
JAX-WS 2.0是JAX-WS的第二个主要版本,它在JAX-RPC(Java API for XML-based RPC)的基础上进行了改进,引入了许多新特性以提升开发者的体验和效率。 **JAX-WS 2.0 的核心概念:** 1. **服务端点接口(SEI, ...
【Java WebService Jax-WS 创建】是Java中创建Web服务的一种常见方式,主要用于构建基于SOAP(Simple Object Access Protocol)的Web服务。JAX-WS(Java API for XML Web Services)是Java EE 5及更高版本中提供的...
JAX-WS 是一种用于构建和部署 Web 服务的 Java API,它在 Java EE 5 及以上版本中被引入,用于替代早期的 JAX-RPC。JAX-WS 提供了更加简洁和面向对象的 API,使得开发者可以更容易地创建符合 W3C 标准的 SOAP...