Jersey JAXB POST添加了一个换行符



我试图发布一个实体到一个web服务,这里的代码:

 EmptyTagWrapper wrap = webResource.get(EmptyTagWrapper.class);
    client = Client.create();
    client.addFilter(new LoggingFilter(System.out));
    webResource = client.resource(MyWebservice.CREATETAGS.getUrl());
    ClientResponse clientResponse = webResource.post(ClientResponse.class, wrap);
    System.out.println(clientResponse);

如果我尝试手动操作,它会工作:

http://www.mysite.de/api/tags/?xml=<?xml version="1.0" encoding="UTF-8"?><prestashop xmlns:xlink="http://www.w3.org/1999/xlink"><tag><name>Testtag</name><id_lang>1</id_lang></tag></prestashop>

但是如果我运行我的程序,我得到这个错误:

<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<errors>
<error>
<code><![CDATA[127]]></code>
<message><![CDATA[XML error : String could not be parsed as XML
XML length : 0
Original XML : ]]></message>
</error>
</errors>
</prestashop>

我认为原因是URL和被封送实体之间附加的换行符,这里是post-request的sysout:

    1 * Client out-bound request
1 > POST http://www.mysite.de/api/tags/?xml=
<?xml version="1.0" encoding="UTF-8"?><prestashop xmlns:xlink="http://www.w3.org/1999/xlink"><tag><name>Testtag</name><id_lang>1</id_lang></tag></prestashop>
1 * Client in-bound response
    1 < 500
    1 < Execution-Time: 0.006
    1 < Server: Apache
    1 < Access-Time: 1404134558
    1 < Connection: close
    1 < Vary: Host
    1 < PSWS-Version: 1.5.4.1
    1 < Content-Length: 282
    1 < Date: Mon, 30 Jun 2014 13:22:38 GMT
    1 < Content-Type: text/xml;charset=utf-8
    1 < X-Powered-By: PrestaShop Webservice
    1 < 

有什么办法解决这个问题吗?


的背景

我有不同的服务和字段,它们是根据实体和服务构造的:

public enum PrestaWebservice {
    PRODUCTLINKS("Key1","products"),
    FULLPRODUCTLIST("Key1","products?display=["+PrestaProduct.FIELDS+"]"),
    CATEGORIESLIST("Key1","categories?display=["+PrestaCategory.FIELDS+"]"),
    CUSTOMERSLIST("Key2","customers?display=["+PrestaCustomer.FIELDS+"]"),
    TAGSLIST("Key2","tags?display=full"),
    EMPTYTAG("Key2","tags?schema=synopsis"),
    CREATETAGS("Key2","tags/?xml=");

    private final String SHOPADDRESS="http://www.mySite.de/api";
    private String key;
    private String url;
    private PrestaWebservice(String key, String url){
        this.key = key;
        this.url = url;
    }
    public String getKey(){
        return key;
    }
    public String getUrl(){
        return SHOPADDRESS+"/"+url;
    }

}

在您的问题中,URL正在您自己的代码中构造。您需要在下面的区域中举例说明为什么要添加回车。

MyWebservice.CREATETAGS.getUrl()

是否有理由发送XML作为查询参数的值,而不是在HTTP请求的正文中?

最新更新