Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java xml RESTful问题的最简单客户端_Java_Xml_Rest_Jaxb_Jersey - Fatal编程技术网

Java xml RESTful问题的最简单客户端

Java xml RESTful问题的最简单客户端,java,xml,rest,jaxb,jersey,Java,Xml,Rest,Jaxb,Jersey,我有一个返回此XML的webresource: <?xml version="1.0" encoding="utf-8"?> <messagebody xmlns="http://api.esendex.com/ns/"> <bodytext>blablabla</bodytext> <characterset>blabla</characterset> </messagebody>

我有一个返回此XML的webresource:

<?xml version="1.0" encoding="utf-8"?>
<messagebody 
    xmlns="http://api.esendex.com/ns/">
    <bodytext>blablabla</bodytext>
    <characterset>blabla</characterset>
</messagebody>
还有一个简单的主类:

package com.example;

import javax.ws.rs.core.MediaType;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        try {

            Client client = Client.create();
            client.addFilter(new HTTPBasicAuthFilter("***", "****"));
            WebResource webResource = client
                    .resource("http://myresturl");


            ClientResponse response = webResource.type(MediaType.APPLICATION_XML).get(ClientResponse.class);
            if (response.getStatus() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + response.getStatus());
            }

            MessageBody body = response.getEntity(MessageBody.class);
            System.out.println(body.getBodytext());


        } catch (Exception e) {

            e.printStackTrace();

        }
    }
}
我通过了身份验证,得到了正确的XML,但是XML解组有问题。我得到以下例外情况:

javax.ws.rs.WebApplicationException: javax.xml.bind.UnmarshalException: unexpected element (uri:"http://api.esendex.com/ns/", local:"messagebody"). Expected elements are <{}messagebody>
javax.ws.rs.WebApplicationException:javax.xml.bind.UnmarshaleException:意外元素(uri:http://api.esendex.com/ns/,本地:“messagebody”)。预期的要素是
据我所知,我已正确设置注释


我做错了什么?

JAXB有自己的名称空间处理机制。我猜它在看到您的类想要处理名称空间之前失败了(由于缺少适当的注释)

您可以通过在与类相同的包中创建一个
package info.java
文件来修复它,然后使用
@XmlSchema
注释来声明名称空间

@XmlSchema(
        elementFormDefault = XmlNsForm.QUALIFIED,
        namespace = "http://api.esendex.com/ns/"
)
package com.example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

您可以看到有关名称空间处理的更多信息,JAXB有自己的名称空间处理机制。我猜它在看到您的类想要处理名称空间之前失败了(由于缺少适当的注释)

您可以通过在与类相同的包中创建一个
package info.java
文件来修复它,然后使用
@XmlSchema
注释来声明名称空间

@XmlSchema(
        elementFormDefault = XmlNsForm.QUALIFIED,
        namespace = "http://api.esendex.com/ns/"
)
package com.example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

您可以查看有关名称空间处理的更多信息,

谢谢!实际上,我通过在同一个文件中添加注释来解决这个问题:@XmlRootElement(name=“messagebody”,namespace=)。谢谢!我通过在同一个文件中添加注释来解决这个问题:@XmlRootElement(name=“messagebody”,namespace=)。