gpt4 book ai didi

java - JAXB 命名空间和前缀

转载 作者:行者123 更新时间:2023-11-30 03:02:19 24 4
gpt4 key购买 nike

我在解码以下 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 调用收到的答案并且不可修改。

另外,为了不破坏任何东西,我将向该 WS 发布“请求”,该 WS 到目前为止运行良好:

<doServiceRequest xmlns="http://www.sign.services.org/IServicios/">
<aplicacion>app</aplicacion>
<params>param1</params>
<params>param2</params>
</doServiceRequest>

还有 bean :

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;

我认为这会起作用(未经测试)。

关于java - JAXB 命名空间和前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35649180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com