- 浏览: 607962 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (263)
- 默认类别 (0)
- STRUTS HIBERNATE (2)
- STRUTS SPRING HIBERNATE (18)
- SOA/WEB service (8)
- PORTAL (3)
- 想法和设计思想 (17)
- SMARTEAM 二次开发 (0)
- ACTIVEBPEL (0)
- ERP (0)
- EAI (0)
- 甲醇汽油 (0)
- webwork freemarker spring hibernate (1)
- 工作流技术研究 (1)
- ROR (5)
- 搜索引擎 (7)
- 3.非技术区 (0)
- 1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (2)
- 2.Java新手区 (2)
- 4.其他技术区 (0)
- ESB (1)
- Petals ESB (6)
- 手机开发 (1)
- docker dedecms (1)
最新评论
-
w630636065:
楼主,期待后续!!!!!!!!
生成文本聚类java实现 (2) -
zilong513:
十分感谢楼主,期待后续。
生成文本聚类java实现 (2) -
qqgoodluck:
可否介绍一下您的选型依据,包括Petal ESB与MULE等E ...
Petals ESB 简介 -
jackiee_cn:
写的比较清楚,学习了
Petals ESB 集群实战 -
忙两夜:
你好,能发一下源代码吗
抓取口碑网店铺资料
客户有一个需求,发布了一个Web Services,其中一个Function,输入的请求参数是Soap协议的XML文件,通过请求后.会输出一个XML格式的文件.
涉及的技术有Freemaker.
基本的思路是:通过一个连接请求,发送soap方式的XML请求文档,然后通过读取流的方式,返回结果.
private String serviceAddress = "http://localhost:8080/axis/services/Corticon"; private URL webServiceUrl; @PostConstruct private void init() { try { webServiceUrl = new URL(serviceAddress); } catch (MalformedURLException e) { e.printStackTrace(); } } public String processRequest(DialogDecisionInput input) { try { cfg.setClassForTemplateLoading(this.getClass(), "/"); cfg.setObjectWrapper(new DefaultObjectWrapper()); cfg.setNumberFormat("################"); // Get and config the connection. HttpURLConnection conn; conn = (HttpURLConnection) webServiceUrl.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); conn.setUseCaches(false); conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); conn.setRequestProperty("SOAPAction", "Corticon"); Map root = new HashMap(); root.put("model", input); Template template = cfg.getTemplate("soapRequest.ftl"); OutputStream os = conn.getOutputStream(); Writer out = new BufferedWriter(new OutputStreamWriter(os, "utf-8")); template.process(root, out); out.flush(); out.close(); // Get the soap response. InputStream is = conn.getInputStream(); String rc = IOUtils.toString(is); return rc; } catch (TemplateException e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); corticonlogger.error("[E00004]" + E00004 + "\n" + sw); } catch (IOException e1) { StringWriter sw = new StringWriter(); e1.printStackTrace(new PrintWriter(sw)); corticonlogger.error("[E00003]" + E00003 + "\n" + sw); } return null; }
呵呵,因为Freemarker的process默认是要写到一个文件当中.增加了IO的操作,比较慢,所以我的另外一篇文章也写了:
Freemarker输出字符串而不是文件
或者参考如下的代码:
private String serviceAddress = "http://localhost:8080/axis/services/Corticon"; private URL webServiceUrl; @PostConstruct private void init() { try { webServiceUrl = new URL(serviceAddress); } catch (MalformedURLException e) { e.printStackTrace(); } } public DialogDecisionService() { // Get and config the connection. cfg.setClassForTemplateLoading(this.getClass(), "/"); cfg.setObjectWrapper(new DefaultObjectWrapper()); cfg.setNumberFormat("################"); cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250)); } public String processRequest(DialogDecisionInput input) { try { HttpURLConnection conn; conn = (HttpURLConnection) webServiceUrl.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); conn.setUseCaches(false); conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8"); conn.setRequestProperty("SOAPAction", "Corticon"); Map root = new HashMap(); root.put("model", input); Template template = cfg.getTemplate("soapRequest.ftl"); /** * StringWriter instead of Writer * Class StringWriter contains a StringBuffer which can be rendered toString * modify by heweiya */ OutputStream os = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "utf-8")); template.setEncoding("UTF-8"); cfg.setDefaultEncoding("UTF-8"); template.process(root, writer); writer.flush(); writer.close(); // Get the soap response. InputStream is = conn.getInputStream(); String rc = IOUtils.toString(is); return rc; } catch (TemplateException e) { StringWriter sw = new StringWriter(); e.printStackTrace(new PrintWriter(sw)); corticonlogger.error("[E00004]" + E00004 + "\n" + sw); } catch (IOException e1) { StringWriter sw = new StringWriter(); e1.printStackTrace(new PrintWriter(sw)); corticonlogger.error("[E00003]" + E00003 + "\n" + sw); } corticonlogger.error("[E00004]" + E00004 + "\n"); return null; }
发送的XML文件格式如下:
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <CorticonRequest xmlns="urn:Corticon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" decisionServiceName="diabetes"> <WorkDocuments> <D_diabetes id="D_diabetes_id_1"> <currentPage>p_medInfo</currentPage> <dialogId>3</dialogId> <dialogInstanceId>771</dialogInstanceId> <displayTitle>Pediatric Diabetes Screening Tool</displayTitle> <function>screen</function> <lastQuestionAnswered>q_sex</lastQuestionAnswered> <locale /> <noOfChangedFlags>0</noOfChangedFlags> <productLine>Loan</productLine> <refId>D-00012</refId> <region>region 1</region> <sessionId xsi:nil="1" /> <version>1</version> <p_medInfo id="P_medInfo_id_1"> <displayTitle>Diabetes Screening - Info</displayTitle> <helpText></helpText> <pageId>7</pageId> <refId>D-00012</refId> <version>1</version> <q_sex id="Q_sex_id_1"> <displayFlag>true</displayFlag> <helpText></helpText> <questionId>41</questionId> <questionText>Sex</questionText> <refId>D-00012</refId> <responseType>Custom</responseType> <uiControl>Radio Button</uiControl> <sequence>1.2</sequence> <version>1</version> <pageQuestionId>44</pageQuestionId> <response id="R_sex_id_13" Type="R_sex"> <responseId>74</responseId> <respEnabled xsi:nil="1" /> <respLabel>Female</respLabel> <respSelected>false</respSelected> <respSeq>3</respSeq> <respValue>F</respValue> </response> <response id="R_sex_id_22" Type="R_sex"> <responseId>73</responseId> <respEnabled xsi:nil="1" /> <respLabel>Male</respLabel> <respSelected>true</respSelected> <respSeq>2</respSeq> <respValue>M</respValue> </response> </q_sex> <q_medIntro id="Q_medIntro_id_7"> <displayFlag>true</displayFlag> <helpText></helpText> <questionId>39</questionId> <questionText>We are asking a few extra questions in order to assess special risks in our new members. I would like to get some additional information about your child. This will just take a couple of minutes.</questionText> <refId>D-00012</refId> <responseType>No response</responseType> <uiControl xsi:nil="1" /> <version>1</version> <sequence>1</sequence> <pageQuestionId>40</pageQuestionId> <response id="R_medIntro_id_101" Type="R_medIntro"> <respEnabled xsi:nil="1" /> <respLabel xsi:nil="1" /> <respSelected xsi:nil="1" /><respValue></respValue> </response> </q_medIntro> <q_age id="Q_age_id_8"> <displayFlag>true</displayFlag> <helpText></helpText> <questionId>40</questionId> <questionText>Current Age</questionText> <refId>D-00012</refId> <responseType>Custom</responseType> <uiControl>Text Box</uiControl> <version>1</version> <sequence>1.1</sequence> <pageQuestionId>45</pageQuestionId> <response id="R_age_id_102" Type="R_age"> <respEnabled xsi:nil="1" /> <respLabel xsi:nil="1" /> <respSelected xsi:nil="1" /><respValue>0</respValue> </response> </q_age> <q_weight id="Q_weight_id_9"> <displayFlag>true</displayFlag> <helpText></helpText> <questionId>42</questionId> <questionText>Weight</questionText> <refId>D-00012</refId> <responseType>Custom</responseType> <uiControl>Text Box</uiControl> <version>1</version> <sequence>1.3</sequence> <pageQuestionId>43</pageQuestionId> <response id="R_weight_id_103" Type="R_weight"> <respEnabled xsi:nil="1" /> <respLabel xsi:nil="1" /> <respSelected xsi:nil="1" /><respValue>0</respValue> </response> </q_weight> <q_heightFeet id="Q_heightFeet_id_10"> <displayFlag>true</displayFlag> <helpText></helpText> <questionId>43</questionId> <questionText>Height - Feet</questionText> <refId>D-00012</refId> <responseType>Custom</responseType> <uiControl>Text Box</uiControl> <version>1</version> <sequence>1.4</sequence> <pageQuestionId>42</pageQuestionId> <response id="R_heightFeet_id_104" Type="R_heightFeet"> <respEnabled xsi:nil="1" /> <respLabel xsi:nil="1" /> <respSelected xsi:nil="1" /><respValue>0</respValue> </response> </q_heightFeet> <displayFlag>true</displayFlag> <helpText></helpText> <questionId>44</questionId> <questionText>Height - Inches</questionText> <refId>D-00012</refId> <responseType>Custom</responseType> <uiControl>Text Box</uiControl> <version>1</version> <sequence>1.5</sequence> <pageQuestionId>41</pageQuestionId> <response id="R_heightInches_id_105" Type="R_heightInches"> <respEnabled xsi:nil="1" /> <respLabel xsi:nil="1" /> <respSelected xsi:nil="1" /><respValue>0</respValue> </response> </q_heightInches> </p_medInfo> <displayTitle></displayTitle> <helpText></helpText> <pageId>9</pageId> <refId>D-00012</refId> <version>1</version> <q_findingsIntro id="Q_findingsIntro_id_9"> <displayFlag xsi:nil="1" /> <helpText></helpText> <questionId>50</questionId> <questionText>Recap:</questionText> <refId>D-00012</refId> <responseType>No response</responseType> <uiControl xsi:nil="1" /> <version>1</version> <sequence>1</sequence> <pageQuestionId>60</pageQuestionId> <response id="R_findingsIntro_id_103" Type="R_findingsIntro"> <respEnabled xsi:nil="1" /> <respLabel xsi:nil="1" /> <respSelected xsi:nil="1" /> <respValue></respValue> </response> </q_findingsIntro> </p_findings> </D_diabetes> </WorkDocuments> </CorticonRequest> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
发表评论
-
Petals ESB 开发之一 代理Web Service
2014-01-13 16:13 1724今天要做的工作有如下三个: ... -
Petals ESB 安装部署
2014-01-12 13:37 1674本文档主要有三个内容。 1)P ... -
Petals ESB 简介
2014-01-12 11:43 2204Petal ESB 是一个 ... -
IBM MQ轶事-误删scratch和active日志怎么办?
2011-11-30 11:39 16441,误删scratch下面的文件后,会造成通道不通。STA ... -
错误: 必须限制口令文件读取访问 解决方法
2011-04-22 16:22 6189我在使用activeMQ时,加入有权限的RMI时,发生 ... -
请求远程服务传参和过大参数的函数
2009-10-10 12:26 1310两个Code,第一个函数是普通请求,Like:http ... -
JAVA处理含有DataSet的web services
2006-12-14 14:08 7648本篇文章将讲述如何通过axis取得.net发布的 ...
相关推荐
通过本文的探讨,我们不仅了解了在C#中动态调用WebServices的必要性和优势,还深入剖析了其实现的技术细节,包括CodeDom、WebClient、反射机制以及对XML/SOAP协议的基本理解。掌握了这些知识后,开发者将能够在更加...
使用 Soap 消息调用 Web Services SOAP(Simple Object Access Protocol)是一种简单的协议,用于在分布式环境中交换信息。它基于 XML 协议,包括四个部分:SOAP 封装、SOAP 编码规则、SOAP RPC 表示和 SOAP 绑定。...
而Web服务(Web Services)则是一种通过互联网交换数据和实现功能的方式,它基于开放的XML(Extensible Markup Language)标准。当你需要在VC++应用中调用Web服务时,这通常涉及到SOAP(Simple Object Access ...
Java作为一种广泛应用的编程语言,提供了丰富的库和支持来处理SOAP通信,其中最著名的是JAX-WS(Java API for XML Web Services)。 首先,理解SOAP消息结构至关重要。一个基本的SOAP消息由三部分组成:Envelope...
本文将深入探讨如何使用Ajax调用Web服务(Webservices),以实现客户端与服务器端的异步通信。 一、Ajax基础 Ajax的核心是JavaScript对象XMLHttpRequest,它提供了与服务器进行交互的能力。通过创建XMLHttpRequest...
首先,`qtsoap`是基于Qt框架的一个库,它允许开发者通过SOAP协议发送和接收XML数据,以调用远程Web服务。SOAP是一种轻量级的、基于XML的协议,用于交换结构化的和类型化的信息。在Qt中使用qtsoap,可以极大地简化与...
本主题的核心是"拼接XML调用WebService",这通常指的是通过构建XML字符串来构造请求,然后发送该请求到一个Web Service接口以获取响应。以下是对这个过程的详细解释: 1. **XML基础**:XML是一种结构化标记语言,它...
在调用Web服务时,Delphi开发者需要构建符合SOAP规范的XML消息。 在Delphi中,可以使用 Indy 或 WinHTTP 组件库来实现HTTP POST请求。这里以Indy为例,其TIdHTTP组件提供了一种简单的方式来发送HTTP请求。首先,...
本项目"**C++调用Web services的控制台应用程序**"正是这样一个示例,它展示了如何在C++环境下创建一个能调用Web服务的简单命令行应用。 首先,我们要理解Web服务的本质。Web服务是一种基于HTTP协议,使用XML(可...
Web服务通常基于简单对象访问协议(SOAP)进行通信,它是一种XML格式的消息交换协议,用于传输数据。而Web服务描述语言(WSDL)是SOAP服务的接口定义,描述了服务的地址、操作和消息格式。C#中的`System....
WebServices返回的数据通常是以XML格式的SOAP响应。在PB中,我们需要解析这个响应来提取有用的信息。这可以通过使用PB的XML处理能力,如DOM(Document Object Model)或XPath(XML Path Language)来完成。例如,...
在Java世界中,调用Web服务通常使用JAX-WS(Java API for XML Web Services)或者Apache Axis库。以下是基本流程: 1. **生成Stub类**:使用wsimport工具或Axis的wsdl2java命令,从WSDL文件生成服务的Stub类。 2. ...
Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...
### 用Java调用WebServices的三种方式 随着互联网技术的发展与成熟,WebServices作为一种标准的、跨平台的、基于XML的信息交换模式被广泛应用。在Java领域,调用WebServices通常涉及遵循一定的技术规范和标准。本文...
XML Web Services的核心在于SOAP(简单对象访问协议),它是一种轻量级的消息协议,用于在不同的应用程序之间传输数据。WSDL(Web服务描述语言)则用于定义服务的接口,而UDDI(统一描述、发现和集成)帮助服务发布...
在IT领域,Web服务是一种通过Internet进行通信的标准化方式,允许不同系统间的应用程序相互交互。在本主题中,我们将深入探讨如何使用Qt框架构建一个XML基础的Web服务客户端,特别是针对SOAP(简单对象访问协议)...
通过上述代码分析,我们可以了解到使用Java调用Web服务的具体实现方式,包括基于Apache Axis的SOAP Web Service调用和使用SOAP协议直接构建调用的过程。这对于Java开发者来说是非常实用的知识点,可以帮助他们在实际...
SOAP(Simple Object Access Protocol)是Web Services中最常用的通信协议,它定义了消息结构和传输方式。 在这个实例中,我们可能会使用到SOAP请求来获取天气预报信息。SOAP消息通常包含三个主要部分:Envelope、...
调用Web服务通常有两种主要的方式:SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)。这两种方式各有特点,适用于不同的场景。 ### SOAP(简单对象访问协议) SOAP是基于XML的...
**JAX-WS: Java API for XML Web Services** JAX-WS(Java API for XML Web Services)是Java平台上用于创建Web服务和Web服务客户端的核心API。这个标准由Java社区进程(JCP)制定,旨在简化面向服务架构(SOA)的...