问题描述
我正在开发使用Web服务的客户端,但是由于某些原因,除非所有名称空间正确且没有任何前缀,否则我的请求将无法正确处理.
I'm developing a client to consume a web service, but for some reason my requests are not properly processed unless all namespaces are correct and without any prefix.
我所有的类都是由服务提供商使用提供的XSD和WSDL创建的.
All my classes were created using the provide XSD's and WSDL's by the service provider.
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
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;
TConsStatServ.class package 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-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服务将无法正确使用它.所以我需要
For some reason the web service doesn't consumes it correctly if I have a prefixed namespace. So what I need
<?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上的命名空间?
How can I change the namespace on the output xml?
推荐答案
已通过替换固定
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
具有预期实体
@XmlElement(namespace="http://www.portalfiscal.inf.br/nfe")
protected TRetEnviNfe;
这篇关于JAXB元帅名称空间前缀的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!