`
xxxx1243
  • 浏览: 16590 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

java-ws soap 访问

 
阅读更多
public class TestSoap {
	
	private String ns = "http://service.soap.org/";
	private String wsdlUrl = "http://localhost:8989/ms?wsdl";

	@Test
	public void test01() {
		try {
			//1、创建消息工厂
			MessageFactory factory = MessageFactory.newInstance();
			//2、根据消息工厂创建SoapMessage
			SOAPMessage message = factory.createMessage();
			//3、创建SOAPPart
			SOAPPart part = message.getSOAPPart();
			//4、获取SOAPENvelope
			SOAPEnvelope envelope = part.getEnvelope();
			//5、可以通过SoapEnvelope有效的获取相应的Body和Header等信息
			SOAPBody body = envelope.getBody();
			//6、根据Qname创建相应的节点(QName就是一个带有命名空间的)
			QName qname = new QName("http://java.zttc.edu.cn/webservice","add","ns");//<ns:add xmlns="http://java.zttc.edu.cn/webservice"/>
			//如果使用以下方式进行设置,会见<>转换为&lt;和&gt
			//body.addBodyElement(qname).setValue("<a>1</a><b>2</b>");
			SOAPBodyElement ele = body.addBodyElement(qname);
			ele.addChildElement("a").setValue("22");
			ele.addChildElement("b").setValue("33");
			//打印消息信息
			message.writeTo(System.out);
		} catch (SOAPException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void test02() {
		try {
			//1、创建服务(Service)
			URL url = new URL(wsdlUrl);
			QName sname = new QName(ns,"MyServiceImplService");
			Service service = Service.create(url,sname);
			
			//2、创建Dispatch
			Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),SOAPMessage.class, Service.Mode.MESSAGE);
			
			//3、创建SOAPMessage
			SOAPMessage msg = MessageFactory.newInstance().createMessage();
			SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
			SOAPBody body = envelope.getBody();
			
			//4、创建QName来指定消息中传递数据
			QName ename = new QName(ns,"add","nn");//<nn:add xmlns="xx"/>
			SOAPBodyElement ele = body.addBodyElement(ename);
			ele.addChildElement("a").setValue("22");
			ele.addChildElement("b").setValue("33");
			msg.writeTo(System.out);
			System.out.println("\n invoking.....");
			
			
			//5、通过Dispatch传递消息,会返回响应消息
			SOAPMessage response = dispatch.invoke(msg);
			response.writeTo(System.out);
			System.out.println();
			
			//将响应的消息转换为dom对象
			Document doc = response.getSOAPPart().getEnvelope().getBody().extractContentAsDocument();
			String str = doc.getElementsByTagName("addResult").item(0).getTextContent();
			System.out.println(str);
		} catch (SOAPException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void test03() {
		try {
			//1、创建服务(Service)
			URL url = new URL(wsdlUrl);
			QName sname = new QName(ns,"MyServiceImplService");
			Service service = Service.create(url,sname);
			
			//2、创建Dispatch(通过源数据的方式传递)
			Dispatch<Source> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
						Source.class, Service.Mode.PAYLOAD);
			//3、根据用户对象创建相应的xml
			User user = new User(3,"zs","张三","11111");
			JAXBContext ctx = JAXBContext.newInstance(User.class);
			Marshaller mar = ctx.createMarshaller();
			mar.setProperty(Marshaller.JAXB_FRAGMENT, true);
			StringWriter writer= new StringWriter();
			mar.marshal(user, writer);
			
			//4、封装相应的part addUser
			String payload = "<nn:addUser xmlns:nn=\""+ns+"\">"+writer.toString()+"</nn:addUser>";
			System.out.println(payload);
			StreamSource rs = new StreamSource(new StringReader(payload));
			
			//5、通过dispatch传递payload
			Source response = (Source)dispatch.invoke(rs);
			
			//6、将Source转化为DOM进行操作,使用Transform对象转换
			Transformer tran = TransformerFactory.newInstance().newTransformer();
			DOMResult result = new DOMResult();
			tran.transform(response, result);
			
			//7、处理相应信息(通过xpath处理)
			XPath xpath = XPathFactory.newInstance().newXPath();
			NodeList nl = (NodeList)xpath.evaluate("//user", result.getNode(),XPathConstants.NODESET);
			User ru = (User)ctx.createUnmarshaller().unmarshal(nl.item(0));
			System.out.println(ru.getNickname());
		} catch (IOException e) {
			e.printStackTrace();
		} catch (JAXBException e) {
			e.printStackTrace();
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerFactoryConfigurationError e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		} catch (XPathExpressionException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void test04() {
		try {
			//1、创建服务(Service)
			URL url = new URL(wsdlUrl);
			QName sname = new QName(ns,"MyServiceImplService");
			Service service = Service.create(url,sname);
			
			//2、创建Dispatch
			Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
						SOAPMessage.class, Service.Mode.MESSAGE);
			
			//3、创建SOAPMessage
			SOAPMessage msg = MessageFactory.newInstance().createMessage();
			SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
			SOAPBody body = envelope.getBody();
			
			//3.2、处理header信息
			SOAPHeader header = envelope.getHeader();
			if(header==null) header = envelope.addHeader();
			QName hname = new QName(ns,"authInfo","nn");
			header.addHeaderElement(hname).setValue("aabbccdd");
			
			//4、创建QName来指定消息中传递数据
			QName ename = new QName(ns,"list","nn");//<nn:add xmlns="xx"/>
			body.addBodyElement(ename);
			msg.writeTo(System.out);
			System.out.println("\n invoking.....");
			
			
			//5、通过Dispatch传递消息,会返回响应消息
			SOAPMessage response = dispatch.invoke(msg);
			response.writeTo(System.out);
			System.out.println();
			
			//将响应的消息转换为dom对象
			Document doc =  response.getSOAPBody().extractContentAsDocument();
			NodeList nl = doc.getElementsByTagName("user");
			JAXBContext ctx = JAXBContext.newInstance(User.class);
			for(int i=0;i<nl.getLength();i++) {
				Node n = nl.item(i);
				User u = (User)ctx.createUnmarshaller().unmarshal(n);
				System.out.println(u.getNickname());
			}
		} catch (SOAPException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void test05() {
		try {
			//1、创建服务(Service)
			URL url = new URL(wsdlUrl);
			QName sname = new QName(ns,"MyServiceImplService");
			Service service = Service.create(url,sname);
			
			//2、创建Dispatch
			Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
						SOAPMessage.class, Service.Mode.MESSAGE);
			
			//3、创建SOAPMessage
			SOAPMessage msg = MessageFactory.newInstance().createMessage();
			SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
			SOAPBody body = envelope.getBody();
			
			//4、创建QName来指定消息中传递数据
			QName ename = new QName(ns,"login","nn");//<nn:add xmlns="xx"/>
			SOAPBodyElement ele = body.addBodyElement(ename);
			ele.addChildElement("username").setValue("ss");
			ele.addChildElement("password").setValue("dd");
			msg.writeTo(System.out);
			System.out.println("\n invoking.....");
			
			
			//5、通过Dispatch传递消息,会返回响应消息
			SOAPMessage response = dispatch.invoke(msg);
			response.writeTo(System.out);
			System.out.println();
			
		} catch(SOAPFaultException e){
			System.out.println(e.getMessage());
		} catch (SOAPException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}
}
分享到:
评论

相关推荐

    java实验_JAX-Ws

    Java实验_JAX-WS主要涉及的是Java平台上的Web服务开发技术,JAX-WS(Java API for XML Web Services)是Java SE和Java EE环境中用于创建和消费SOAP Web服务的标准库。这个实验旨在帮助你深入理解JAX-WS的工作原理...

    webservice之jax-ws

    JAX-WS,全称为Java API for XML Web Services,是Java平台上的一个标准,用于构建和部署基于SOAP(Simple Object Access Protocol)的Web服务。它是Java SE和Java EE平台的一部分,简化了开发人员在Web服务领域的...

    JAX-WS规范

    通过阅读该文档,读者可以更好地理解JAX-WS如何将Java接口映射到SOAP消息,以及如何发布和调用Web服务。 总结来说,JAX-WS规范为Java开发者提供了强大的Web服务开发工具,使得创建和使用Web服务变得更为简便。通过...

    使用 Spring-WS 完成的 Web Service (SOAP)

    Spring-WS 是一个基于 Java 的开源框架,专门设计用于创建 SOAP(简单对象访问协议)Web 服务。它基于模型-视图-控制器(MVC)架构模式,提供了构建和消费 SOAP 消息的高级抽象。Spring-WS 强调契约优先的方法,这...

    Jax-ws RI.zip

    SOAP是一种基于HTTP的协议,用于在Web上交换结构化和类型化的信息,而JAX-WS就是用来处理这些SOAP消息的Java工具集。 Tomcat是一款流行的开源Java Servlet容器,用于运行Java Web应用程序。在Tomcat上部署Web服务,...

    jax-ws jax-rs 分别创建soap和restful类型的webservice

    JAX-WS是Java API for XML Web Services的缩写,它为开发人员提供了一种在Java平台上构建SOAP Web服务和客户端的标准化方式。以下是使用JAX-WS创建SOAP Web服务的基本步骤: 1. **定义服务接口**:使用Java SE中的`...

    JAX-WS低版本

    JAX-WS是Java平台上用于创建Web服务的标准API,它简化了开发和部署基于SOAP(Simple Object Access Protocol)的Web服务和客户端应用程序的过程。 **描述分析:** 描述提到“tomcat+webservice实现简单的web服务...

    jax-ws实现webservice调用

    它使得开发人员能够轻松地创建、部署和使用基于SOAP(简单对象访问协议)的Web服务。在本教程中,我们将深入探讨如何使用JAX-WS来发布和调用Web服务。 ### 1. JAX-WS概述 JAX-WS提供了一种简化的方式,将Java方法...

    如何基于JAX-WS开发一个WebService实例

    JAX-WS提供了一种简单的方式来创建SOAP(Simple Object Access Protocol)Web服务,它集成了Java SE和Java EE平台,使得开发者可以方便地实现服务接口和服务实现,然后通过工具自动生成WSDL(Web Service ...

    jax-ws用户指南 pdf版

    JAX-WS (Java API for XML Web Services) 是 Java 平台上用于开发和实现 Web 服务的官方标准之一。本用户指南详细介绍了 JAX-WS 2.2 版本的功能、编程模型以及如何使用该 API 来构建 Web 服务应用。 #### 文档结构 ...

    java-j2ee-soap-sga:Java-J2EE SOAP服务

    在Java-J2EE环境中,可以使用JAX-WS(Java API for XML Web Services)或者CXF等框架来创建SOAP Web服务。 4. **JAX-WS**:Java API for XML Web Services是Java标准,用于创建SOAP Web服务。它简化了服务端和...

    JAX-WS_Java API for XML Web Services

    **JAX-WS: Java API for XML Web Services** JAX-WS(Java API for XML Web Services)是Java平台上用于创建Web服务和Web服务客户端的核心API。这个标准由Java社区进程(JCP)制定,旨在简化面向服务架构(SOA)的...

    使用JAX-WS(JWS)发布WebService

    使用JAX-WS(JWS)发布WebService 使用myeclipse开发java的webservice的两种方式 方式一: (此方式只能作为调试,有以下bug:jdk1.6u17?以下编译器不支持以Endpoint.publish方式发布document方式的soap,必须在...

    gsoap客户端Jax-ws服务端实例

    本实例主要探讨了如何使用gSOAP客户端来访问由JAX-WS(Java API for XML Web Services)在MyEclipse 8.x环境中创建的Web服务。这个过程涉及到C++编程和.NET框架的使用,特别是Visual Studio 2005。 首先,让我们...

    JAX-WS在Tomcat中发布服务

    JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于构建和部署Web服务。它提供了基于SOAP(Simple Object Access Protocol)的接口,使得开发人员可以方便地创建、消费和管理Web服务。在这个实例...

    appsensor-ws-soap-client-2.0.0-RC1.zip

    【标题】"appsensor-ws-soap-client-2.0.0-RC1.zip" 提供的是一个基于Web服务(SOAP)的客户端组件,用于与Appsensor系统进行交互。Appsensor是一个开源的安全事件检测和响应框架,专注于实时的威胁检测。版本号...

    JAX-WS-Deploy-To-Tomcat-Example

    JAX-WS(Java API for XML Web Services)是Java平台上的一个标准,用于构建和部署基于SOAP的Web服务。本示例将详细介绍如何使用JAX-WS开发Web服务,并将其部署到Apache Tomcat服务器上。 1. **JAX-WS简介** JAX-...

    Jax-WS的配置方式

    Jax-WS(Java API for XML Web Services)是Java平台上的一个标准,用于创建和消费Web服务。它提供了一种基于SOAP(Simple Object Access Protocol)的、类型安全的方式来处理Web服务。本文将深入探讨Jax-WS的配置...

Global site tag (gtag.js) - Google Analytics