我使用JAXB生成soap xml请求。我想要的当前xml输出是这个
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:rgw="http:/blablablablabla.org"
xmlns:typ="http://blablablablabla.org/bla/bla">
<soapenv:Header>
<wsse:Security
soapenv:mustUnderstand="1"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="testToken-13">
<wsse:Username>blbalbalL</wsse:Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234r</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
</soapenv:Body>
</soapenv:Envelope>
到目前为止,我已经生成了Envelope和Header标签,但我遇到了安全标签问题。
我的问题是,如果我尝试将xmlns设置为package-info.class,前缀是正确的,但xmlns:wsse="blbalbla"
和xmlns:wsu="http://balbla.com"
转到根元素(信封)而不是安全性标签。这是我得到的输出:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:rgw="http://gr/gsis/rgwsalldata/RgWsAllData.wsdl"
xmlns:typ="http://gr/gsis/rgwsalldata/RgWsAllData.wsdl/types/"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<soapenv:Header>
<wsse:Security/>
</soapenv:Header>
<soapenv:Body/>
正如您在xml输出中所看到的,xmlns:wsse
和xmlns:wsu
名称空间位于安全标记处。我怎么能将这些xmlns安全标记?以及UsernameToken标记应该如何构建?
包info.class
@XmlSchema(
namespace = "http://schemas.xmlsoap.org/soap/envelope/",
xmlns = { @XmlNs(prefix="soapenv", namespaceURI="http://schemas.xmlsoap.org/soap/envelope/"),
@XmlNs(prefix="rgw", namespaceURI="http://blabalbalbal.org"),
@XmlNs(prefix="typ", namespaceURI="blablaba/types/"),
@XmlNs(prefix="wsse", namespaceURI="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"),
@XmlNs(prefix="wsu", namespaceURI="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")},
elementFormDefault = XmlNsForm.QUALIFIED)
package broker.jaxb.xmlrequest;
import javax.xml.bind.annotation.*;
答案 0 :(得分:1)
您可以在Security类之上使用@XmlType(namespace =&#34; http://docs.oasis-open.org/wss")(或XMLRoot),而不是在package-info中声明命名空间它应该将命名空间降低到安全标记。
如评论中所提到的,两个文档都是等效的xml,因此首先测试soap消息是否正常工作。如果对方也可以阅读这个格式,那么重现精确格式就没有意义(任何体面的现代WS框架都可以)。