JAXB 命名空间和前缀
JAXB namespaces and prefix
解组以下内容时遇到问题 XML:
<p456:doServiceResponse xmlns:p456="http://www.sign.services.org/IServicios/">
<respuesta>0</respuesta>
<respuesta>Operacion correcta</respuesta>
<respuesta>respuesta</respuesta>
</p456:doServiceResponse>
我有以下 class:
package com.ws.client;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "respuesta" })
@XmlRootElement(name = "doServiceResponse")
public class DoServiceResponse {
@XmlElement(required = true)
protected List<String> respuesta;
public List<String> getRespuesta() {
if (respuesta == null) {
respuesta = new ArrayList<String>();
}
return this.respuesta;
}
}
和包信息文件:
@XmlSchema(
namespace = "http://www.sign.services.org/IServicios/",
elementFormDefault = XmlNsForm.QUALIFIED)
package com.ws.client;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
XML 的解组没有失败,但是 respuesta
字段是 null
。如果我将 p456
作为前缀添加到所有 <respuesta>
节点,那么它就可以工作。问题是我不能这样做,因为这是我从 WS 调用中收到的答案并且不可修改。
此外,为了不破坏任何东西,我将 post "request" 到那个 WS,到目前为止工作正常:
<doServiceRequest xmlns="http://www.sign.services.org/IServicios/">
<aplicacion>app</aplicacion>
<params>param1</params>
<params>param2</params>
</doServiceRequest>
还有豆子:
package com.ws.client;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "aplicacion", "params" })
@XmlRootElement(name = "doServiceRequest")
public class DoServiceRequest {
@XmlElement(required = true)
protected String aplicacion;
@XmlElement(required = true)
protected List<String> params;
public String getAplicacion() {
return aplicacion;
}
public void setAplicacion(String value) {
this.aplicacion = value;
}
public List<String> getParams() {
if (params == null) {
params = new ArrayList<String>();
}
return this.params;
}
}
有人可以告诉我如何配置注释,这样我就可以在不修改 XML 并且不接触 JAXB 解组器的情况下解组它们吗?那可能吗?
您可以简单地向 @XmlElement 注释添加一个命名空间参数:
@XmlElement(required = true, namespace="")
protected List<String> respuesta;
我认为这可行(未经测试)。
解组以下内容时遇到问题 XML:
<p456:doServiceResponse xmlns:p456="http://www.sign.services.org/IServicios/">
<respuesta>0</respuesta>
<respuesta>Operacion correcta</respuesta>
<respuesta>respuesta</respuesta>
</p456:doServiceResponse>
我有以下 class:
package com.ws.client;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "respuesta" })
@XmlRootElement(name = "doServiceResponse")
public class DoServiceResponse {
@XmlElement(required = true)
protected List<String> respuesta;
public List<String> getRespuesta() {
if (respuesta == null) {
respuesta = new ArrayList<String>();
}
return this.respuesta;
}
}
和包信息文件:
@XmlSchema(
namespace = "http://www.sign.services.org/IServicios/",
elementFormDefault = XmlNsForm.QUALIFIED)
package com.ws.client;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
XML 的解组没有失败,但是 respuesta
字段是 null
。如果我将 p456
作为前缀添加到所有 <respuesta>
节点,那么它就可以工作。问题是我不能这样做,因为这是我从 WS 调用中收到的答案并且不可修改。
此外,为了不破坏任何东西,我将 post "request" 到那个 WS,到目前为止工作正常:
<doServiceRequest xmlns="http://www.sign.services.org/IServicios/">
<aplicacion>app</aplicacion>
<params>param1</params>
<params>param2</params>
</doServiceRequest>
还有豆子:
package com.ws.client;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "aplicacion", "params" })
@XmlRootElement(name = "doServiceRequest")
public class DoServiceRequest {
@XmlElement(required = true)
protected String aplicacion;
@XmlElement(required = true)
protected List<String> params;
public String getAplicacion() {
return aplicacion;
}
public void setAplicacion(String value) {
this.aplicacion = value;
}
public List<String> getParams() {
if (params == null) {
params = new ArrayList<String>();
}
return this.params;
}
}
有人可以告诉我如何配置注释,这样我就可以在不修改 XML 并且不接触 JAXB 解组器的情况下解组它们吗?那可能吗?
您可以简单地向 @XmlElement 注释添加一个命名空间参数:
@XmlElement(required = true, namespace="")
protected List<String> respuesta;
我认为这可行(未经测试)。