2016-02-26 105 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; 

我認爲這工作(未經測試)。