指定したURL先のサーバにxmlを送信したいです。
どこに問題があるか、ご教授いただけるでしょうか。
#該当のソースコード
呼び出し側
java
1status = service.distribute(xml,URL);
HTTP送信ソース
java
1 2@Service 3public class HttpPost { 4 5 private final RestOperations rest; 6 7 public HttpPost(RestTemplateBuilder builder) { 8 this.rest = builder.basicAuthentication("admin","admin").build(); 9 10 } 11 12/* 13xml = <id>100</id> 14url = http://hostname:8085/order/test 15*/ 16 public HttpStatus distribute(String xml,String url) throws Exception { 17 18 ResponseEntity<String> entity; 19 if (url != null) { 20 entity = rest.postForEntity(url, xml, String.class); 21 } 22 23 return status; 24 } 25} 26
上記のプログラムで実施したいのは、以下のcurlコマンドと同じことです。
ちなみに、下記のcurlコマンドでは、サーバへの送信は201が返ってきており、成功します。
curl
1curl -v -X POST -T (xmlファイルの絶対パス) -u admin:admin http://hostname:8085/order/test
#実行結果/エラー内容
2020-03-10 21:35:44.478 [DEBUG] [scheduling-1Accept=[text/plain, application/json, application/*+json, /]
2020-03-10 21:35:44.478 [DEBUG] [scheduling-1Writing [<id>100</id>
] with org.springframework.http.converter.StringHttpMessageConverter
2020-03-10 21:35:45.014 [ERROR] [scheduling-1doSecondaryResponse:684] org.springframework.web.client.HttpClientErrorException$UnsupportedMediaType: 415 Unsupported Media Type: [<errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
<error>
<error-message>Unsupported media type: text/plain ; Should be one of: application/yang-data+xml, application/yang-data+json.</error-message>
<error-tag>malformed-message</error-tag>
<error-type>application</error-type>
</error>
</errors>
]
#環境
java8
tomcat9
Springbootフレームワーク
#ほかにやってみたこと
xmlがplane textだと判断されているのかと思ったため、xmlで送ってみようとして以下の処理を入れてみましたが、同じようなエラーが出ます。
java
1 public HttpStatus distribute(String xml,String url) throws Exception { 2 //String型をDocument型にパースする 3 InputSource inputSource = new InputSource(new StringReader(xml)); 4 5 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 6 DocumentBuilder builder; 7 8 builder = factory.newDocumentBuilder(); 9 Document document; 10 document = builder.parse(inputSource); 11 12 entity = rest.postForEntity(url, document, String.class); 13 }
2020-03-10 19:29:10.154 [DEBUG] [scheduling-1Accept=[text/plain, application/json, application/*+json, /]
2020-03-10 19:29:10.154 [DEBUG] [scheduling-1Writing [[#document: null]] with org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
2020-03-10 19:29:10.492 [ERROR] [scheduling-1doSecondaryResponse:658] org.springframework.web.client.HttpClientErrorException$UnsupportedMediaType: 415 Unsupported Media Type: [<errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
<error>
<error-message>Unsupported media type: application/json ; Should be one of: application/yang-data+xml, application/yang-data+json.</error-message>
<error-tag>malformed-message</error-tag>
<error-type>application</error-type>
</error>
</errors>
]
他にも、明示的にxmlになるようにしてみましたが、xmlではなくyang-data+xmlで指定するようにとのエラーが出ますが
MediaTypeではyang-data+xmlが指定できません。
java
1 public HttpStatus distribute(String xml,String url) throws Exception { 2 3 xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+xml; 4 HttpHeaders headers = new HttpHeaders(); 5 headers.setContentType(MediaType.APPLICATION_XML); 6 HttpEntity<String> request = new HttpEntity<String>(xml, headers); 7 8 final ResponseEntity<String> response = rest.postForEntity(url, request, String.class); 9}
2020-03-10 21:23:11.488 [DEBUG] [scheduling-1Accept=[text/plain, application/json, application/*+json, /]
2020-03-10 21:23:11.488 [DEBUG] [scheduling-1Writing [<?xml version="1.0" encoding="utf-8"?><id>100</id>
] as "application/xml"
2020-03-10 21:23:11.945 [ERROR] [scheduling-1doSecondaryResponse:684] org.springframework.web.client.HttpClientErrorException$UnsupportedMediaType: 415 Unsupported Media Type: [<errors xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf">
<error>
<error-message>Unsupported media type: application/xml ; Should be one of: application/yang-data+xml, application/yang-data+json.</error-message>
<error-tag>malformed-message</error-tag>
<error-type>application</error-type>
</error>
</errors>
]
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/10 14:06 編集