JAX-RS-Jersey+;XML-->;HTTP 400错误请求

JAX-RS-Jersey+;XML-->;HTTP 400错误请求,xml,jaxb,jax-rs,Xml,Jaxb,Jax Rs,@西科尔斯基 /这是我的web.xml/ /这是来自tomcat的完整堆栈跟踪的更新问题/ 我在将请求xml从RestClient发送到Jax Rs时遇到了一个问题。 我接受了这个请求,并将其与bean一起保存,bean是一个jaxb对象。 但,每当我发出请求时,服务器都会返回HTTP 400错误请求 这是我的XML请求 <trans> <rechargephone>0990909</rechargephone> <phonetype>GS

@西科尔斯基 /这是我的web.xml/

/这是来自tomcat的完整堆栈跟踪的更新问题/

我在将请求xml从RestClient发送到Jax Rs时遇到了一个问题。 我接受了这个请求,并将其与bean一起保存,bean是一个jaxb对象。 但,每当我发出请求时,服务器都会返回HTTP 400错误请求

这是我的XML请求

<trans>
  <rechargephone>0990909</rechargephone>
  <phonetype>GSM</phonetype>
  <amount>10000</amount>
  <useracctid>10100100</useracctid>
  <userpin>111</userpin>
  <quantity>1</quantity>
</trans>
方法
add
接受带有JAXB对象的XML参数,在这里,它是
Trans
,也是这个XML的根元素

下面是我的JAXB对象:

@XmlRootElement
public class Trans {

private String rechargephone;
private String phonetype;
private String amount;
private String useracctid;
private String userpin;
private int quantity;

public String getRechargephone() {
    return rechargephone;
}
public void setRechargephone(String rechargephone) {
    this.rechargephone = rechargephone;
}
我创建JAXB对象的方法就是使用
@XmlRootElement
创建一个Javabean


有谁能建议我如何修复它,以及如何创建JAXB对象吗?

这似乎是XML请求中的一些细节错误。。。JAXB和API似乎定义得很好。我建议你尝试两件事:

1) 向XML请求添加一个标头,这将导致以下XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<trans>
<rechargephone>0990909</rechargephone>
<phonetype>GSM</phonetype>
<amount>10000</amount>
<useracctid>10100100</useracctid>
<userpin>111</userpin>
<quantity>1</quantity>
</trans>

希望能有帮助。如果没有,请提供引发的异常的进一步日志信息(不仅仅是HTTP状态400-您可以从Tomcat控制台和日志文件获取该信息)。

您可能需要在根元素声明中添加XML命名空间声明(xmlns)

否则,使用web.xml中的以下参数在Jersey上激活详细跟踪:

<init-param>
  <param-name>com.sun.jersey.config.feature.TracePerRequest</param-name>
  <param-value>true</param-value>      
</init-param>

根据其他建议,添加xml标题:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

还可以尝试将xmlns声明添加到根元素中,该声明应该与包类似:

<trans xmlns="http://www.xsd.your/Package">
...
</trans>

...

欢迎来到堆栈溢出。您可以添加exct
异常,包括服务器端的堆栈跟踪吗?谢谢您的回复,Plonus。@Uwe Plonus。确切的例外是HTTP状态400-错误请求。说明:客户端发送的请求在语法上不正确。我使用的服务器是ApacheTomcat/7.0.41。请添加用于创建请求的客户端代码。还请检查将XML转换为
Trans
的提供程序是否在服务器端正确注册。我没有使用客户端代码。相反,我使用RESTClient with POST方法。。。url为,并带有xml请求主体。。对于提供者,我只使用带有@XmlRootElement…tks的javabean来帮助您。。但问题仍然在发生。。我将根据您的建议检查异常堆栈跟踪。您是否可以尝试将您的XML头更新为(我的答案中缺少“standalone”…这表明它不依赖于其他XML文件)。standalone也无法帮助..:(我建议您使用异常的完整跟踪更新问题,以便我们可以进一步帮助您。值得一提的是此功能的详细说明。)-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<trans>
<rechargephone>0990909</rechargephone>
<phonetype>GSM</phonetype>
<amount>10000</amount>
<useracctid>10100100</useracctid>
<userpin>111</userpin>
<quantity>1</quantity>
</trans>
@XmlRootElement(name="trans")
<init-param>
  <param-name>com.sun.jersey.config.feature.TracePerRequest</param-name>
  <param-value>true</param-value>      
</init-param>
X-Jersey-Trace-Accept=true
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<trans xmlns="http://www.xsd.your/Package">
...
</trans>