Я пытаюсь опубликовать XML-контент с помощью SCM Manager (v1.46) через REST. Использование Curl из командной строки работает отлично:SCM Manager REST POST xml возвращает 415 Unsupported Media Type
call curl -XPOST -u scmadmin:scmadmin -H "content-type: application/xml" -d "<users><name>abc</name><active>true</active><password>abc</password><displayName>abc</displayName><mail>[email protected]</mail><type>xml</type><lastModified/><creationDate/><admin>false</admin></users>" http://localhost:8080/scm/api/rest/users.xml
и пользователь а создаются. Мой клиент Java, используя Джерси, получает ответ от диспетчера SCM 415 Unsupported Media Type. Клиент выглядит следующим образом:
...
public WebResource getService(String p_url, String p_user, String p_password) {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
client.addFilter(new HTTPBasicAuthFilter(p_user, p_password));
return client.resource(getBaseURI(p_url));
}
...
public Document postXmlDocument(String p_url, String p_user, String p_password, String p_xml) {
WebResource service = getService(p_url, p_user, p_password);
Document xmlDocument = null;
ClientResponse response = service.accept(MediaType.APPLICATION_XML).post(ClientResponse.class, p_xml);
if (response.getStatus() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
String output = response.getEntity(String.class);
System.out.println("Server response : \n");
System.out.println(output);
return xmlDocument;
}
где p_xml получает такое же содержание, как в локонах команды. Не следует ли вводить принятый тип носителя, используя MediaType.APPLICATION_XML? Используемый Джерси имеет эту координату Maven:
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.12</version>
</dependency>
Любой намек был бы хорошим. SK
Да, принимаю (MediaType.APPLICATION_XML) .type ("приложение/XML") является решением этой проблемы. Настало время прочитать его источник jersey API. Спасибо, SK –