如何在Talend中通过POST-to-URL上传原始XML数据?

如何在Talend中通过POST-to-URL上传原始XML数据?,talend,Talend,我正在尝试将一个xml文件上载到url,以便可以检索xml格式的响应 我试过使用thttprequest 但它说,“读取输入后无法写入输出。” 我做错了什么 request.xml如下所示 <?xml version="1.0" encoding="UTF-8" ?> <request xmlns="http://www.isinet.com/xrpc42" src="app.id=PartnerApp,env.id=PartnerAppEnv,partner.email=E

我正在尝试将一个xml文件上载到url,以便可以检索xml格式的响应

我试过使用thttprequest

但它说,“读取输入后无法写入输出。” 我做错了什么

request.xml如下所示

<?xml version="1.0" encoding="UTF-8" ?>
<request xmlns="http://www.isinet.com/xrpc42"
src="app.id=PartnerApp,env.id=PartnerAppEnv,partner.email=EmailAddress" >
  <fn name="LinksAMR.retrieve">
 <list>
  <!-- WHO'S REQUESTING -->
 <map>
 <val name="username">username</val>
 <val name="password">test</val>
 </map>
 <!-- WHAT'S REQUESTED -->
  <map>
 <list name="WOS">
  <val>timesCited</val>
  <val>ut</val>
  <val>doi</val>
  <val>sourceURL</val>
  <val>citingArticlesURL</val>
  <val>relatedRecordsURL</val>
  </list>
  </map> <!--end "return_data" -->
  <!-- LOOKUP DATA -->
 <map>
<!-- QUERY "cite_1" -->
 <map name="cite_1">
 <val name="atitle">article title string</val>
 <val name="stitle">full journal title</val>
 <val name="issn">1234-5678</val>
 <val name="vol">12</val>
 <val name="issue">12</val>
 <val name="year">2008</val>
 <val name="doi">doi_string</val>
 <val name="ut">isi_ut_num</val>
<val name="spage">1234</val>
<!-- authors list can be used to specify multiple authors -->
    <list name="authors">
  <val>First, AU</val>
  <val>Second, AU</val>
 <val>Third, AU</val>
 </list>
  </map> <!-- end of cite_id-->
 <-- QUERY "cite_2"
  <map name="cite_2">
 ...
  </map>
 -->
  </map> <!-- end of citations -->
   </list>
  </fn>
  </request>

用户名
测试
引用时间
美国犹他州
内政部
源URL
citingArticlesURL
相关记录
文章标题字符串
全称
1234-5678
12
12
2008
doi_字符串
isi_ut_num
1234
首先,非盟
第二,非盟
第三,非盟
我在科学网的网址上发帖

通常,如果有错误,我应该得到一个响应,即XML中出现了错误。我甚至不明白

我尝试使用tRestClient,但我不确定如何通过它将文件上载到url。这篇文章也可能包含一些线索

我使用了tJava组件

URL url = new URL("https://ws.isiknowledge.com/cps/xrpc");
StringBuilder content = new StringBuilder();
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setRequestMethod("POST");
c.setDoOutput(true);
c.setDoInput(true);
c.setUseCaches(false);
c.setRequestProperty("Content-Type", "application/xml");
c.connect();

byte[] buffer = new byte[1024];
int cbuffer = 0;
InputStream is = new BufferedInputStream(new     FileInputStream("C:\\Users\\dhiraj\\workspace\\request.xml"));
OutputStream os = new BufferedOutputStream(c.getOutputStream());
while ((cbuffer = is.read(buffer)) != -1) {
     os.write(buffer, 0, cbuffer);
}
os.flush();
os.close();
is.close();
if (HttpURLConnection.HTTP_OK == c.getResponseCode()) {
    is = new BufferedInputStream(
    c.getInputStream());
    while ((cbuffer = is.read(buffer)) != -1) {
    content.append(new String(
    buffer, 0, cbuffer));
    }
    is.close();
  } else {
    System.err.println(c.getResponseCode() + ":" + c.getResponseMessage());
}
row1.ResponseContent = content.toString();
c.disconnect();

您还可以上载字符串而不是文件。但为此,您需要使用tJava_行,因为tJava不能一次处理一行

URL url = new URL("https://ws.isiknowledge.com/cps/xrpc");
StringBuilder response_content = new StringBuilder();
String data=row1.content;
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
 OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
 wr.write(data);
 wr.flush();

 BufferedReader rd = new BufferedReader(new    InputStreamReader(conn.getInputStream()));
  String line;
   while ((line = rd.readLine()) != null) {
  //  System.out.println(line);
    response_content.append(line);
   }
 String output=response_content.toString();
 wr.close();
 rd.close();
 row2.content=(output);

我听说thttprequest组件需要更新。如果是这样的话,有什么解决办法吗。最好使用tJava组件。您能发布一些关于您试图发布到的web服务的信息和一些您试图发布到的XML示例吗?谢谢。这比我的好。我现在不需要创建两个工作-一个用于编写请求,另一个用于阅读响应