首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

SOAP形式发送XML调用Web Services

2012-11-09 
SOAP方式发送XML调用Web Services??? 客户有一个需求,发布了一个Web Services,其中一个Function,输入的请

SOAP方式发送XML调用Web Services

??? 客户有一个需求,发布了一个Web Services,其中一个Function,输入的请求参数是Soap协议的XML文件,通过请求后.会输出一个XML格式的文件.

??? 涉及的技术有Freemaker.

??? 基本的思路是:通过一个连接请求,发送soap方式的XML请求文档,然后通过读取流的方式,返回结果.

?

private String serviceAddress = "http://localhost:8080/axis/services/Corticon";private URL webServiceUrl;@PostConstructprivate 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;@PostConstructprivate 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>
?

?

热点排行