在JAX-WS 中实现多个Service间会话保持( 1 )

泛微OA E9 WebServices 接口开发:从 JAX-WS 注解到 services.xml 配置的 3 个关键步骤 本文详细解析了泛微OA E9 WebServices接口开发的完整流程,从JAX-WS注解实践到services.xml配置的3个关键步骤,涵盖接口定义、实现类编写、服务部署与验证等核心环节。特别针对二次开发场景,提供了性能优化与安全实践方案,帮助开发者高效完成WebServices接口的创建发布。 阅读详情

笔者前言:笔者是想着用CXF来开发点东西的,没想到比AXIS2的会话管理曲折那么多。可能是笔者对基本的规范和协议不甚了解吧。以下部分转贴,代码基本是笔者改写的。即使如此,笔者认为还是标题为转贴内容吧。


一。前言

本文不是JAX-WS的入门文档,如需了解JAX-WS,请参阅其它文章。

WebService为客户端与服务器沟通提供了非常良好的开发体验,由其在Java中体现尤为明显。JAX-WS是Java世界里一个非常优秀的WebService开发工具,通过采用JAX-WS,开发人员可以用非常简单的方式从客户端调用服务器开放的服务。

在采用C/S模式开发的时候,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器在进行这些交互过程的某一个交互步骤时,往往需要了解上一次交互过程的处理结果,或者上几步的交互过程结果,这就需要在这几次交互过程中保持会话状态。

基于HTTP的应用开发中,要在多个调用之间保持会话状态,通常可以采用以下几种方式:

l URL重写,把要传递的参数重写在URL中; 

l 使用Cookie,把要传递的参数写入到客户端cookie中; 

l 使用隐含表单,把要传递的参数写入到隐含的表单中; 

l 使用Session,把要传递的参数保存在session对象中(其实Session机制基于cookie或者URL重写)。 

上面几个方式有一个共同点:把要传递的参数保存在两个页面都能共享的对象中,前一个页面在这个对象中写入状态、后一个页面从这个对象中读取状态。特别是对于使用session方式,每个客户端在服务端都对应了一个sessionid,服务端维持了由sessionid标识的一系列session对象,而session对象用于保持共享的信息

上述保持会话状态的方式,较常用的是服务器Session技术。服务端程序通过调用session.setAttribute(key,value) 和 session.getAttribute(key) ,在多次交互过程中保持会话状态。另外,为了保持会话,客户端也要做一些相应的工作。下面将从两个方面讨论在使用JAX-WS的项目中,如何才能保持会话状态。


二。服务器端代码

2.1 WEB SERVICE(HelloWorld) 

package com.zx.cxf.service;  

import java.util.Date;  
import java.util.List;  

import javax.jws.WebParam;  
import javax.jws.WebService;  

//注解生命此为WEBSERVICE
@WebService  
public interface HelloWorld {  
	//接受HTTP传过来的参数TEXT为这个方法的参数值
    String sayHi(@WebParam(name = "text") String text);  

    Date curDate();  

    List<Long> addNumber(@WebParam(name = "addToNum") Long num);  
}  

2.2接口的实现(HelloWorldImpl)
package com.zx.cxf.service;  

import java.util.ArrayList;  
import java.util.Date;  
import java.util.List;  

import javax.annotation.Resource;
import javax.jws.WebMethod;  
import javax.jws.WebParam;  
import javax.jws.WebService;  
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;

import org.apache.cxf.transport.http.AbstractHTTPDestination;
import org.springframework.beans.factory.annotation.Autowired;

@WebService(endpointInterface = "com.zx.cxf.service.HelloWorld", serviceName = "HelloWorld")  
public class HelloWorldImpl implements HelloWorld {  
    private List<Long> localNumbers; 
    //通过注解,自动注入如下需要用到的变量(没用到setter方法哦.不过没错误)
    @Resource
    private WebServiceContext context;
    private HttpServletRequest request;
    
    //通过注解,声明定义一些列WEBSERVICE的东西.笔者忘记怎么说了,详细调查后补上
    @WebMethod(operationName="sayHello",action="hello")  
    public String sayHi(@WebParam(name = "text") String text) {  
    	//获得MessageContext上下文,在WEBSERVICE中,是用这个上下文的.
    	MessageContext ctx = context.getMessageContext();
    	/*HttpServletRequest request = (HttpServletRequest)
    	ctx.get(AbstractHTTPDestination.HTTP_REQUEST);*/
    	
    	//获得HTTP的SESSION
    	HttpSession session =((javax.servlet.http.HttpServletRequest)ctx.get(MessageContext.SERVLET_REQUEST)).getSession();
    	//这只是一个统计变量
    	Integer count = (Integer)session.getAttribute("count");
    	String change = null;
    	/**
    	 * 判断客户端是第几次访问,用以测试SESSIONID究竟有没改变.
    	 * 这是配合客户端中,对多个SERVICE中保持会话状态的测试.
    	 * 这2种测试,在客户端代码中会注解说明.
    	 */
    	if(count == null){
    		session.setAttribute("count", 1);
    	}else{
    		count++;
    		if(count >= 2)
    			change = "你是第二次访问了";
    	}
    	
    	
    	//HttpSession session = request.getSession();
        return "Hello " + text + "sessionID: "+session.getId()+"   "+change;  
    }  
    @WebMethod(exclude=true)  
    public Date curDate() {  
        return new Date();  
    }  

    public List<Long> addNumber(@WebParam(name = "addToNum") Long num) {  
        if (localNumbers == null) {  
            localNumbers = new ArrayList<Long>();  
        }  
        localNumbers.add(num);  
        return localNumbers;  
    }  
    public void setRequest(HttpServletRequest request){
    	this.request = request;
    }
}  

2.3补发SPRING的配置代码

<?xml version="1.0" encoding="UTF-8"?>    
    
<!-- START SNIPPET: beans -->    
<beans xmlns="http://www.springframework.org/schema/beans"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    xmlns:jaxws="http://cxf.apache.org/jaxws"    
    xsi:schemaLocation="     
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd     
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">    
    
    <import resource="classpath:META-INF/cxf/cxf.xml" />    
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />    
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />    
    
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> 
    <bean id="serverPasswordCallback" class="cxf.server.ServerPasswordCallback" />
    <!--<jaxws:endpoint      
      id="helloWorld"      
      implementor="com.zx.cxf.service.HelloWorldImpl"      
      address="/HelloWorld" >
      -->
      <jaxws:endpoint      
      id="helloWorld"          
      address="/HelloWorld" >
      <jaxws:implementor>
            <bean class="com.zx.cxf.service.HelloWorldImpl"></bean>
      </jaxws:implementor> 
      <!--<jaxws:inInterceptors>  
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />  
             SAAJInInterceptor只在CXF是2.0.X版本时或之前版本时才是必须的   
             <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor"/>   
            <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">  
                <constructor-arg>  
                    <map>  
                        <entry key="action" value="UsernameToken" />  
                        <entry key="passwordType" value="PasswordText" />  
                         <entry key="user" value="FHDServer" />   
                        <entry key="passwordCallbackRef">  
                            <ref bean="serverPasswordCallback" />  
                        </entry>  
                    </map>  
                </constructor-arg>  
            </bean>  
        </jaxws:inInterceptors> 
      
      --></jaxws:endpoint>  
          
</beans>    
<!-- END SNIPPET: beans -->  


三。客户端代码

3.1 在单个SERVICE中保持会话状态的客户端代码

package clients;

import java.net.URL;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.ws.Binding;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.Handler;

import com.zx.cxf.handle.Myhandle;
import com.zx.cxf.service.HelloWorld;
import com.zx.cxf.service.HelloWorld_Service;

public class TestHello {
	private static final QName SERVICE_NAME = new QName("http://service.cxf.zx.com/", "HelloWorld");
	public static final Myhandle handler = new Myhandle();
	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		URL wsdlURL = HelloWorld_Service.WSDL_LOCATION;
		HelloWorld_Service ss = new HelloWorld_Service(wsdlURL, SERVICE_NAME);
        HelloWorld port = ss.getHelloWorldImplPort();
        
        //这是使用BindingProvider设置在此次访问中,对于SESSION进行保留
        ((BindingProvider)port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
        //((BindingProvider)port).getRequestContext().put("thread.local.request.context", true);
     
        //测试会发现2此的打印的SESSIONID都是一样的,如果不是用以上BindingProvider的话,SESSIONID是不一样的。
        //因为客户端对于WEB SERVICE访问,没特殊设置每次的访问都是新访问,服务器都会建立新的会话。
        System.out.println(port.sayHi("sonx"));
        Thread.currentThread().sleep(3000);
        System.out.println(port.sayHi("sonx"));
	}

}

3.2在多个SERVICE中保持会话。

3.2.1 声明一个实现SOAPHandler接口的类:

package com.zx.cxf.handle;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.xml.namespace.QName;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;

public class Myhandle implements SOAPHandler<SOAPMessageContext> {
	
	private List cookie = null;
	
	public Set<QName> getHeaders() {
		// TODO Auto-generated method stub
		return null;
	}

	public void close(MessageContext context) {
		// TODO Auto-generated method stub
		
	}

	public boolean handleFault(SOAPMessageContext context) {
		// TODO Auto-generated method stub
		return false;
	}

	public boolean handleMessage(SOAPMessageContext context) {
		try {
			//获得当前调用方向
			Boolean out = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
			if(!out){//响应
				Map<String, List<String>> responseHeaders = (Map<String, List<String>>) context.get(MessageContext.HTTP_RESPONSE_HEADERS);
				List<String> c = responseHeaders.get("Set-cookie"); //sessionid在该域中
				if(cookie==null && c!=null){ //这是第一次HTTP调用,cookie刚刚得到
					cookie = c;        //保存该cookie
				}else{
					System.out.println("DEBUG: 现在不是第一个调用HTTP了.因此COOKIE早已存在.");
				}
			}else{ //请求
				//获取请求上下文
				java.util.Map<String, List<String>> requestHeaders = (Map<String, List<String>>) context.get(MessageContext.HTTP_REQUEST_HEADERS);
				if(requestHeaders==null){ //请求上下文可能为空,构造一个新的即可
					requestHeaders = new HashMap<String, List<String>>();
					//将一个空的请求上下文设置到SOAPMessageContext中
					context.put(MessageContext.HTTP_REQUEST_HEADERS, requestHeaders);
					//设置该请求上下文全局有效
					context.setScope(MessageContext.HTTP_REQUEST_HEADERS, MessageContext.Scope.APPLICATION);
				}
				//如果已经获得了sessionid,将该sessionid设置到请求上下文中即可
				if(cookie!=null){
					requestHeaders.put("cookie", cookie);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return true;//返回true,意味着其它Handler也可以被调用
	}

}

3.2.2在客户端中调用HANDLER来完成多个SERVICE间的会话保持
package clients;

import java.net.URL;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.ws.Binding;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.Handler;

import com.zx.cxf.handle.Myhandle;
import com.zx.cxf.service.HelloWorld;
import com.zx.cxf.service.HelloWorld_Service;

public class TestHello {
	private static final QName SERVICE_NAME = new QName("http://service.cxf.zx.com/", "HelloWorld");
	public static final Myhandle handler = new Myhandle();
	/**
	 * @param args
	 * @throws InterruptedException 
	 */
	public static void main(String[] args) throws InterruptedException {
		URL wsdlURL = HelloWorld_Service.WSDL_LOCATION;
		HelloWorld_Service ss = new HelloWorld_Service(wsdlURL, SERVICE_NAME);
        HelloWorld port = ss.getHelloWorldImplPort();
        
        //((BindingProvider)port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true);
        //((BindingProvider)port).getRequestContext().put("thread.local.request.context", true);
        
        //调用到了我们之前声明的HANDLER了哦。实现多个SERVICE间的会话保持。
        Binding binding  = ((BindingProvider) port).getBinding();
        List<Handler> handlerList = binding.getHandlerChain();//获得Handler链
        if (!handlerList.contains(handler)) {//防止重复插入Handler
        	handlerList.add(handler);
        	binding.setHandlerChain(handlerList);
        }
        
        System.out.println(port.sayHi("sonx"));
        Thread.currentThread().sleep(3000);
        System.out.println(port.sayHi("sonx"));
	}

}


四。笔者后言

以上多为实现为主,注释也加上了。当然中间一些理论性的解释并没有,因此这里给读者一个传送门。

这是笔者拜读后完成的。两两结合,大家花点时间,应该可以明白的了。CXF使用JAX-WS,我不知道AXIS2的原理是什么,感觉封装性比CXF更强。

不过灵活性感觉没CXF强。想独立把AXIS2拿出来结合到已有的WEB项目中,也很麻烦。可能是我没弄清楚吧。

传送门:http://blog.youkuaiyun.com/ts1990421/article/details/6804933

对了,以上的客户端代码只是对同一个SERVICE进行测试,不作得准。笔者已经写好了2个SERVICE的测试了代码了。迟点贴上。

WebService(一):工作原理 一、WebServiceWebService,顾名思义就是基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用.二、三要素WebService的三要素是: SOAP (Simple Object Access Protocol):简易对象访问协议,soap用来描述传递信息的格式。 WSDL (WebServices Description La... 阅读详情

相关推荐

DaVinci Configurator BswM模块配置

BswM是AUTOSAR(Automotive Open System Architecture)系统架构中的模块之一,它是基础软件模块(BSW)之一。BswM全称为Basic Software Module Manager(基础软件模块管理器),它负责管理和协调其他BSW模块的行为和交互,以实现整个系统的功能。BswM可以被看作是一个状态机,通过监控系统的状态和事件触发,来控制其他BSW模块的运行状态和互相配合,以达到整个系统的预期行为。

qq_59258431的博客 3947

spring整合cxf 使用jax-ws规范实现webservice功能

一.新建服务端 新建项目:spring-jax-ws-server 1.pom文件的编写: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.

健康平安的活着的专栏 1454

华为AR6140E/S5735设备密码策略配置全攻略:从复杂度到锁定机制

本文详细介绍了华为AR6140E/S5735设备的密码策略配置方法,涵盖密码复杂度、时效性和防护性三大核心维度。通过具体的CLI命令示例,指导管理员如何设置密码长度、字符组合、有效期及登录失败锁定等安全机制,为企业网络提供全面的用户名密码防护策略。

weixin_30836759的博客 531

webservice 保留状态

简介   有许多聪明的办法可以解决HTTP协议的无状态问题,例如对每个请求重复发送应用程序数据包、使用HTTP认证机制来将请求映射到特定的用户、使用Cookie来存储一系列请求的状态等。在ASP.net技术中提供了一个非常有效的方案来保持状态,该方案隐藏了所有高难度的,具有挑战性的工作的细节,用户只需简单地使用System.Web.SessionState.HttpSessionState类。同

未来软件 1199

LMX2595实战:手把手教你配置JESD204B时钟与SYSREF(含相位同步避坑指南)

本文详细介绍了LMX2595在JESD204B时钟系统中的配置与优化方法,包括时钟系统架构设计、相位同步配置、SYSREF生成技巧以及PCB布局规范。通过实战案例和避坑指南,帮助工程师充分发挥LMX2595的超低相位噪声和抖动性能,确保高速数据转换器系统的稳定性和同步精度。

weixin_29206669的博客 478

ADK 第一篇 Google Agent Development Kit 简介

是一个灵活且模块化的框架,专为开发和部署AI智能体而设计。虽然ADK针对Gemini和Google生态系统进行了优化,但它与模型无关、与部署环境无关,并兼容其他框架。ADK的核心理念是让智能体开发更接近传统软件开发模式,从而帮助开发者更轻松地构建、部署和编排智能体架构——无论是处理简单任务,还是管理复杂工作流。:利用预置工具、自定义函数、OpenAPI规范或集成现有工具,赋予智能体多样化能力,实现与谷歌生态系统的深度整合。

2501_90353350的博客 3043

Web Service Context示例

Web service context指Endpoint之间传输的消息。Context内容以键值对格式(Map)进行存储,包括incoming和outgoing Message.   CXF提供了访问上下文数据的对象:javax.xml.ws.handler.MessageContext,而MessageContext与Message所在的 Scope有关: Application Sc...

SpringsSpace 974

Android 14.0 SystemUI下拉通知栏通知去掉长按事件

在14.0的系统rom产品定制化开发中,在systemui模块中关于下拉状态栏这块也是非常重要的部分,最近在关于systemui下拉通知栏的每条通知部分 要求去掉通知栏通知的长按事件,不需要长按功能,所以就需要分析下关于长按事件是在哪里注册的,然后去掉就可以了,接下来分析实现 相关功能

安卓兼职framework和app工程师的博客 277

spring 整合cxf批量发布多个接口

spring 整合webService后需要在spring-cxf中配置需要发布的接口,配置如下: <bean id="DemoServiceBean" class="com.app.ahnyapp.cxf.impl.DemoServiceImpl"> </bean> <!-- #DemoService是和你的实现类上...

wuyu5649的博客 1318

C# 固高板卡(总线型) 操作类

主要功能有:初始化,轴使能,正负方向手动移动,回0,点到点移动,等待移动完成,输入IO数据读取,输出IO控制,清除报警等功能。

StevenChen的博客 572

【算能】TPU 指令集架构深度解析

TPU指令集以领域专用性与数据流驱动为核心,通过精简指令集、硬件固化逻辑与高并行架构,实现张量计算的极致性能。开发者通常无需直接编写指令,但理解其设计原理对性能调优(如内存布局优化、指令调度)至关重要。算能TPU通过开放指令描述与编译器工具链,为垂直行业提供了更高灵活性的定制空间,而谷歌TPU则依赖编译器的全自动化优化,更适合大规模标准模型部署。未来,随着稀疏计算、光子计算等技术的引入,TPU指令集将进一步向高能效与高泛化性演进。

浩瀚之水的专栏 1183

使用cxf JaxWsServerFactoryBean发布webservice服务

发布服务的代码如下,其余代码和。

m0_74295055的博客 468

Dify 第 13 篇 Dify 工作流 详解

工作流通过将复杂任务分解为节点降低复杂度,提升LLM应用的性能和稳定性。Dify工作流分为两类:Chatflow面向对话场景(如客服),支持多轮对话;Workflow面向批处理场景(如翻译),提供逻辑节点实现自动化。核心概念包括节点、变量(系统/会话/环境变量)及应用类型差异:Chatflow支持中间输出和对话历史,Workflow仅支持结束节点输出。系统变量以"sys"开头,用于全局数据传递,不同应用类型变量不同,如Chatflow的sys.query存储用户输入,Workflow的s

甘蓝的专栏 3248

(转)在JAX-WS 中实现多个Service间会话保持

在JAX-WS 中实现多个Service间会话保持 作者:刘嘉欣 南开大学信息学院 liujx@nankai.edu.cn 在JAX-WS 中实现多个Service间会话保持 1 服务器端 1 客户端 2 1.在同一个Service的不同调用之间保持会话 2 2.

半天想不出来 2353

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

在JAX-WS 中实现多个Service间会话保持

在JAX-WS中实现多个Service间会话保持 1 服务器端 1 客户端 2 1.在同一个Service的不同调用之间保持会话 2 2.在不同的Service调用时保持会话 3 本文不是JAX-WS的入门文档,如需了解JAX-WS,请参阅其它文章。 WebService为客户端与服务器沟通提供了非常良好的开发体验,由其在Java中体现尤为明显。JAX-WS是Java世界里一个非常优...

weixin_30576827的博客 100

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JAX-WS与JAX-RPC之间是啥关系?

Web 服务已经出现很久了。首先是 SOAP,但 SOAP 仅描述消息的情况,然后是 WSDL,WSDL 并不会告诉您如何使用 Java™ 编写 Web 服务。在这种情况下,JAX-RPC 1.0 应运而生。经过数月使用之后,编写此规范的 Java Community Process (JCP) 人员认识到需要对其进行一些调整,调整的结果就是 JAX-RPC 1.1。该规范使用大约一年之后,JCP

老唐 的专栏 6949

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Web 服务提示与技巧: JAX-RPC 与 JAX-WS 的比较

JAX-WS 2.0 是 JAX-RPC 1.1 的后续版本。本文将引出对这两个 Java™ Web 服务编程模型进行比较的一系列文章。引言Web 服务已经出现很久了。首先是 SOAP,但 SOAP 仅描述消息的情况,然后是 WSDL,WSDL 并不会告诉您如何使用Java™ 编写 Web 服务。在这种情况下,JAX-RPC 1.0 应运而生。经过数月使用之后,编写此规

溺水的鱼 - Later equals never. 1049

簡單JAX-WS Web Service使用教學

JAX-WS(Java API for XML Web Services)Web Service是一種由Oracle Sun發展的以XML為基礎的Web Service開發技術。目前已經涵概到Java EE5(含)以上的版本,它可以讓使用者迅速開發Java Web Service,除了採用SOAP(Simple Object Access Protocol)通訊協定和XML資料標準,也支援

xiaoshang的专栏 1442

jax-ws handler client端例子

<br />接着上一篇文章,这里举一个client端handler的例子。<br />先把webservice服务端的代码整个贴一下<br />webservice:<br />import javax.jws.HandlerChain; import javax.jws.WebMethod; import javax.jws.WebService; @WebService @HandlerChain(file="handlers.xml") public class HelloWS {

chyroger的专栏 5751

java jax-ws_Java的开放源WS堆栈-设计目标和理念

java jax-ws 介绍 除了商业供应商提供的选项之外,还有许多开源Java框架可供选择以实现Web服务。 在Java空间中用于实现基于SOAP / WS- *的解决方案的最受欢迎的开源堆栈包括Apache Axis2 , Apache CXF , Spring Web Services , JBossWS和Sun的Metro 。 我向这些堆栈的主要开发人员提出了许多问题,这些问题涉及他...

cunfu6353的博客 863

WebService CXF学习(进阶篇2):JAX-WS讲解

JAX-WS规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。   在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将...

xuzhfa123 148

web service和rpc的区别

Web 服务已经出现很久了。首先是 SOAP,但 SOAP 仅描述消息的情况,然后是 WSDL,WSDL 并不会告诉您如何使用 Java 编写 Web 服务。在这种情况下,JAX-RPC 1.0 应运而生。经过数月使用之后,编写此规范的 Java Community Process (JCP) 人员认识到需要对其进行一些调整,调整的结果就是 JAX-RPC 1.1。该规范使用大约一年之后,JCP 人

qq_24558789的博客 612

Web Service(jsr181)相关

Web服务是一种部署在web上的自描述对象或组件,能够通过一系列的标准协议(如WSDL,SOAP,UDDI)描述、发布、发现、查询和访问   1.       实现技术 axis,xfire 2.       Webservice用到的技术 Xml Soap Rpc Wsdl 3.       Webservice原理及概念 Webservice定义了一套标准的调用过

hanjiaming的专栏 661

java面试题(96~125)《中》

这部分主要是与Java Web和Web Service相关的面试题。96、阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet。97、Servlet接口中有哪些方法? 答:Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关: - void init(

ywl470812087的博客 467

IDEA集成WebService实战:从环境配置到接口调用的完整指南

本文详细介绍了在IDEA中集成WebService的完整流程,从环境配置到接口调用的实战指南。涵盖JAX-WS插件安装、Apache Axis框架配置、客户端代码生成及常见问题解决方案,帮助开发者快速掌握WebService开发技巧,提升开发效率。

weixin_28839629的博客 378

Web服务的几种实现方法

我们为什么应该使用基于Document风格的SOAP服务?RPC风格的承前启后性在上节中,我们介绍了RPC和Document风格Web服务的差别。首先,有人可能要问,对RPC和Document wrapped风格的服务来说,我们毕竟只关心要交换消息及它们的WSDL,而不去管它是RPC还是Document风格,所以从这方面说,这两种方法差别不大。实际上,它们之间的差别不在于实际操作中,而更在

carlwu的专栏 4275
上一篇: android初入门工具及配置
下一篇: 常用SQL语句自整理(不定时补全)
ichsonx
博客等级 码龄19年 202粉丝 74原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值