如何在Talend中通过POST-to-URL上传原始XML数据?
我正在尝试将一个xml文件上载到url,以便可以检索xml格式的响应 我试过使用thttprequest 但它说,“读取输入后无法写入输出。” 我做错了什么 request.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 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示例吗?谢谢。这比我的好。我现在不需要创建两个工作-一个用于编写请求,另一个用于阅读响应