`
Herbaceous
  • 浏览: 10820 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

通过JAXB请求和解析WebService

 
阅读更多

 

  1. WeatherWebService的getWeatherbyCityName SOAP1.2为例
  2. 需要两个对象:
  • 请求对象(GetWeatherbyCityName)
  • 响应对象(GetWeatherbyCityNameResponse)

 

package jaxb.soap;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class GetWeatherbyCityName {
	@XmlElement
	private String theCityName;

	private GetWeatherbyCityName() {
	}
	public static GetWeatherbyCityName create() {
		return new GetWeatherbyCityName();
	}
	public GetWeatherbyCityName theCityName(String theCityName) {
		this.theCityName = theCityName;
		return this;
	}
}

 

 

package jaxb.soap;

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

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class GetWeatherbyCityNameResponse {

	@XmlElementWrapper(name = "getWeatherbyCityNameResult")
	@XmlElement(name = "string")
	private List<String> strings = new ArrayList<String>();

	public List<String> getStrings() {
		return strings;
	}

}

 

package-info.java 不能少,给请求对象GetWeatherbyCityName加上命名空间的,修改前缀

@javax.xml.bind.annotation.XmlSchema(
	namespace = "http://WebXml.com.cn/",
	elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
)
package jaxb.soap;

 

 

请求WebService并解析为GetWeatherbyCityNameResponse对象

package jaxb;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;

import jaxb.soap.GetWeatherbyCityNameResponse;
import jaxb.soap.GetWeatherbyCityName;

import org.w3c.dom.Document;

public class JaxbTest {

	private static String uri = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx";

	public static void main(String[] args) throws Exception {
		URL url = URI.create(uri).toURL();
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();

		connection.setDoOutput(true);
		connection.setRequestMethod("POST");
		connection.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");

		// 发送数据
		OutputStream outputStream = connection.getOutputStream();

		Document requestDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
		Marshaller marshaller = JAXBContext.newInstance(GetWeatherbyCityName.class).createMarshaller();
		marshaller.marshal(GetWeatherbyCityName.create().theCityName("南京"), requestDocument);
		SOAPMessage requestSOAPMessage = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage();
		SOAPBody soapBody = requestSOAPMessage.getSOAPBody();
		soapBody.addDocument(requestDocument);
		SOAPEnvelope soapEnvelope = requestSOAPMessage.getSOAPPart().getEnvelope();
		soapEnvelope.removeNamespaceDeclaration("env");
		soapEnvelope.addNamespaceDeclaration("soap12", "http://www.w3.org/2003/05/soap-envelope");
		soapEnvelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
		soapEnvelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
		soapEnvelope.setPrefix("soap12");
		soapEnvelope.removeChild(soapEnvelope.getHeader());
		soapBody.setPrefix("soap12");
		requestSOAPMessage.writeTo(outputStream);

		// 接收数据
		InputStream inputStream = connection.getInputStream();

		SOAPMessage responseSOAPMessage = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(null, inputStream);
//		responseSOAPMessage.writeTo(System.out);
		Unmarshaller unmarshaller = JAXBContext.newInstance(GetWeatherbyCityNameResponse.class).createUnmarshaller();
		JAXBElement<GetWeatherbyCityNameResponse> jaxbElement = unmarshaller.unmarshal(responseSOAPMessage.getSOAPBody().extractContentAsDocument(), GetWeatherbyCityNameResponse.class);
		GetWeatherbyCityNameResponse response = jaxbElement.getValue();
		System.out.println(response.getStrings());

		outputStream.close();
		inputStream.close();
		connection.disconnect();
	}

}

 输出结果:

[江苏, 南京, 58238, 58238.jpg, 2014-7-27 14:55:22, 25℃/31℃, 7月26日 多云转雷阵雨, 西风3-4级转东北风3-4级, 1.gif, 4.gif, 今日天气实况:气温:23℃;风向/风力:东北风 2级;湿度:98%;空气质量:暂无;紫外线强度:中等, 穿衣指数:热,适合穿T恤、短薄外套等夏季服装。
过敏指数:暂无。
运动指数:较适宜,请适当降低运动强度并注意户外防风。
洗车指数:较不宜,风力较大,洗车后会蒙上灰尘。
晾晒指数:适宜,天气不错,抓紧时机让衣物晒太阳吧。
旅游指数:暂无。
路况指数:干燥,天气较好,路面较干燥,路况较好。
舒适度指数:较不舒适,多云,有些热。
空气污染指数:暂无。
紫外线指数:中等,涂擦SPF大于15、PA+防晒护肤品。, 25℃/30℃, 7月27日 雷阵雨, 东南风3-4级, 4.gif, 4.gif, 25℃/31℃, 7月28日 雷阵雨转阴, 东南风3-4级, 4.gif, 2.gif, 南京简称“宁”,别名“金陵”,也曾称建业、建康、石头城等,现为江苏省省会,是长江下游西部的中心城市。它位于江苏省西部,东依宁镇山脉,地势险固,风景秀丽。诸葛亮曾对南京一带的山川形势评价说:“钟阜龙蟠,石城虎踞”。南京属北亚热带季风气候区,四季分明,年度最佳气节为秋季(9-11月)。南京是历经苍桑的十代都会。三国鼎立,她目睹群雄角逐争战;六代兴替,她阅尽王朝的曲终幕落;明初,她以举世无双的巍巍城垣显示了泱泱大国之风;晚清,她为近代中国第一个不平等条约被冠上自己的名字而蒙受辱;太平天国,历史在这里风雷激荡;辛亥革命,潮流在这里奔突迂回;抗日战争,日军在这里留下人类历史上最野蛮、最血腥的一页。景观:南京秦淮河,中山陵,玄武湖,莫愁湖,雨花台景区,明孝陵,栖霞山,南京长江大桥。南京是中国的历史文化名城之一,文化古迹比较集中,有新石器时代古文化遗址多处,有三国东吴所筑石头城遗址、南京帝王的陵墓、明代朱元璋的陵墓(明孝陵等)。名胜游览地也很多,主要有中山陵、玄武湖、灵谷寺、秦淮河和栖霞山等。革命纪念地有梅园新村、雨花台等。钟山风景区为国家第一批国家重点风景名胜区,位于南京东北郊,以钟山和玄武湖为中心,是来南京旅游的旅游者的必游之地。这一带主要景观包括中山陵、明孝陵、孙权墓和灵谷寺等。南京山、水、城、林相映成趣,景色壮丽秀美,是中国著名的风景旅游城市。]

 

1
0
分享到:
评论

相关推荐

    Jaxb webservice java调用

    通过这样的方式,JAXB使得我们在Java中调用Web服务变得简单且直观,无需手动处理XML解析和序列化的复杂过程。在实际应用中,JAXB结合其他Java Web服务框架,如JAX-WS,可以构建强大的客户端和服务端应用。

    拼接xml调用webservice

    本主题的核心是"拼接XML调用WebService",这通常指的是通过构建XML字符串来构造请求,然后发送该请求到一个Web Service接口以获取响应。以下是对这个过程的详细解释: 1. **XML基础**:XML是一种结构化标记语言,它...

    WebService源码和笔记.zip

    4. **WebService开发工具**:如使用Apache CXF、Gson、JAXB等工具进行WebService的开发和调试。 5. **安全性考虑**:介绍如何在WebService中实现安全机制,如HTTPS加密、WS-Security(SOAP消息的安全标准)等。 6....

    webservice接口调用工具类依赖jar包

    WebService接口调用工具类...总之,调用WebService接口需要一系列的Java库支持,这些库提供了从解析WSDL到构建和发送SOAP请求,再到处理响应的所有功能。理解并正确使用这些jar包是成功调用WebService接口的关键步骤。

    webService客户端传xml请求 直接main方法运行

    在IT行业中,Web服务是一种广泛使用的通信方式,允许...总的来说,通过学习和实践这些步骤,你将能够构建一个Web服务客户端,它可以XML格式发送请求,并在Java的main方法中直接运行,这对于测试和调试Web服务非常有用。

    webService

    通过XML、SOAP、WSDL和UDDI等标准,WebService使得不同系统间的交互变得可能,特别是在异构网络环境中。在Java领域,WebService的实现主要包括JAX-WS和JAX-RS,分别对应于基于SOAP和REST的服务。 #### 二、Apache ...

    webservice 客户端调用公共方法

    在提供的`webservice通用工具类`中,可能包含了一些方便复用的函数,例如封装了上述步骤的`callWebService`方法,它接受XML请求和URL作为参数,返回处理后的响应。这样的工具类简化了开发过程,提高了代码的可维护性...

    深入浅出WebService

    WebService是一种基于Web的服务,允许不同系统间通过网络进行通信和数据交换,以实现跨平台、跨语言的互操作性。其核心特点是利用HTTP协议进行数据传输,并且主要采用SOAP(Simple Object Access Protocol)作为数据...

    JAVA调用WebService所需要的JAR

    8. **HTTP客户端库**:为了通过HTTP发送请求,可能还需要HTTP客户端库,如`httpclient.jar`(Apache HttpClient)或`httpcore.jar`,它们处理HTTP连接和请求。 在实际开发中,根据选用的框架和Web服务的特性,可能...

    WebService实现天气预报

    可以使用各种工具或库来帮助构建和解析SOAP消息,例如Java的JAXB,C#的SoapHttpClient,或者JavaScript的axios库。 5. **处理返回数据**:收到天气信息后,客户端需要解析XML或JSON数据,展示给用户。这可能涉及DOM...

    Spring_WebService源码

    5. **客户端调用**: 客户端通过SOAP请求与服务交互,Spring-WS会解析请求,执行相应的业务逻辑,然后返回响应。 **四、Spring WebService的扩展性** Spring WebService还支持多种扩展功能,如: 1. **消息级安全*...

    WebService所需Jar包

    在WebService中,当涉及到复杂的数据交换时,JAF可以帮助解析和创建MIME格式的附件。 5. **JDOM, DOM4J, XOM等XML解析库**:这些库提供了处理XML文档的不同方式,比如JDOM提供了Java对象模型来操作XML,DOM4J是基于...

    Spring+cxf请求webService

    同时,通过CXF的日志配置,可以查看详细的请求和响应XML,帮助定位问题。 6. **优化与性能** 对于大规模使用的情况,可以考虑使用CXF的缓存机制,减少重复的WSDL解析和Java类生成。此外,还可以通过调整线程池...

    普通java访问c# webService

    通过理解WebService的工作原理以及Java的客户端生成和调用机制,开发者可以灵活地实现不同语言间的交互。在实际开发中,还需要考虑错误处理、性能优化和安全问题,以确保系统的稳定性和可靠性。

    webservice

    4. **XML解析库**:如DOM、SAX或JAXB,用于处理返回的XML响应数据。 5. **Spring Integration**:可能被用来集成客户端调用Web服务的功能,提供更灵活的编程模型。 6. **异常处理**:客户端需要处理网络异常、服务不...

    Java访问.Net Webservice 通过httpclient SOAP实现

    6. **解析SOAP响应**:解析SOAP响应XML通常需要用到如JAXB或DOM解析器等XML处理库。根据XML结构提取所需信息,如方法的返回值。 7. **异常处理**:在实际开发中,还需要考虑网络问题、服务器错误等各种异常情况,...

    WebService

    接着,你需要掌握SOAP协议的工作原理,如何封装请求和解析响应。WSDL文件的编写也是关键,它定义了服务的接口、操作、输入和输出消息格式。对于服务的部署和调用,你需要了解如何配置服务器(如Tomcat)和客户端代码...

    jdk 生成webservice工程(源码 )

    3. SOAP:了解其消息格式和工作原理,以及如何通过SOAP请求和响应进行交互。 4. JAXB:如何使用JAXB将Java对象和XML数据进行绑定,实现数据的序列化和反序列化。 5. 客户端调用:如何生成服务代理,以及如何通过服务...

    webservice调用天气预报、各国货币转换的核心代码

    在天气预报和货币转换的API中,XML用于封装和解析请求与响应的数据。 4. **Java**:Java是用于开发WebService客户端和服务端的常用语言。在调用WebService时,可以使用Java的JAX-WS(Java API for XML Web Services...

    WebService 的调用天气预报(附源码Demo)

    通过`wsimport`,我们可以自动生成与WebService交互所需的全部Java代码,包括客户端代理类和服务接口。 在描述中提到,这个项目是一个Java项目,这意味着我们将使用Java来实现Weather WebService的客户端。下载提供...

Global site tag (gtag.js) - Google Analytics