2016-02-26 100 views
1

解组下面的XML时,我有一个问题前缀:JAXB命名空间和

<p456:doServiceResponse xmlns:p456="http://www.sign.services.org/IServicios/"> 
    <respuesta>0</respuesta> 
    <respuesta>Operacion correcta</respuesta> 
    <respuesta>respuesta</respuesta> 
</p456:doServiceResponse> 

我有下面的类:

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,这是工作的罚款,到目前为止:

<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解组器?这可能吗?

+0

我想这是因为你有'xmlns:p456 =“http://www.sign.services.org/IServicios/”'作为命名空间。如果你的命名空间像'xmlns:“那么它将工作在没有'p456'的情况下。”http://www.sign.services.org/IServicios/“ – user2004685

+0

@ user2004685你的意思是在第一个XML上,doServiceResponse?这就是WS如何返回响应,所以我不能修改它。 – carcaret

+0

您是否使用同一组架构的双方?我的意思是要求以及回应? – user2004685

回答

2

你可以一个命名空间参数只需添加到@XmlElement注释:

@XmlElement(required = true, namespace="") 
protected List<String> respuesta; 

我认为这工作(未经测试)。