我正在开发一个使用Web服务的客户端,但由于某些原因,除非所有命名空间都正确且没有任何前缀,否则我的请求将得不到正确处理。
我的所有课程都是使用服务提供商提供的XSD和WSDL创建的。
NfeDadosMsg.class
package br.inf.portalfiscal.nfe.wsdl.nfestatusservico4;
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.XmlAnyElement;
import javax.xml.bind.annotation.XmlMixed;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"content"
})
@XmlRootElement(name = "nfeDadosMsg")
public class NfeDadosMsg {
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
public List<Object> getContent() {
if (content == null) {
content = new ArrayList<Object>();
}
return this.content;
}
}
package-info.java
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.portalfiscal.inf.br/nfe/wsdl/NFeStatusServico4", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package br.inf.portalfiscal.nfe.wsdl.nfestatusservico4;
TConsStatServ.class 包br.inf.portalfiscal.nfe;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
name = "TConsStatServ",
propOrder = {"tpAmb", "cuf", "xServ"}
)
public class TConsStatServ {
@XmlElement(
required = true
)
protected String tpAmb;
@XmlElement(
name = "cUF",
required = true
)
protected String cuf;
@XmlElement(
required = true
)
protected String xServ;
@XmlAttribute(
name = "versao",
required = true
)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
protected String versao;
public TConsStatServ() {
}
...
}
package-info.java
package br.inf.portalfiscal.nfe;
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.portalfiscal.inf.br/nfe", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package br.inf.portalfiscal.nfe
输出xml:
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
<S:Body>
<nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeStatusServico4" xmlns:ns2="http://www.portalfiscal.inf.br/nfe">
<ns2:consStatServ versao="4.00">
<ns2:tpAmb>2</ns2:tpAmb>
<ns2:cUF>33</ns2:cUF>
<ns2:xServ>STATUS</ns2:xServ>
</ns2:consStatServ>
</nfeDadosMsg>
</S:Body>
</S:Envelope>
由于某些原因,如果我有一个带前缀的命名空间,Web服务就不会正确使用它。所以我需要什么
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
<S:Body>
<nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeStatusServico4">
<consStatServ versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe">
<tpAmb>2</tpAmb>
<cUF>33</cUF>
<xServ>STATUS</xServ>
</consStatServ>
</nfeDadosMsg>
</S:Body>
</S:Envelope>
如何更改输出xml上的命名空间?
答案 0 :(得分:0)
通过替换
修复@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
使用预期的实体
@XmlElement(namespace="http://www.portalfiscal.inf.br/nfe")
protected TRetEnviNfe;