我的基于SAAJ的客户端生成以下XML并将其发送到.NET web服务:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<AuthenticationHeader xmlns="http://www.w3.org/2001/XMLSchema-instance">
<Password xmlns="http://schemas.datacontract.org/2004/07/">temp123</Password>
<UserName xmlns="http://schemas.datacontract.org/2004/07/">temp321</UserName>
</AuthenticationHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<GetTracks xmlns="http://tempuri.org/">
<TrackName>baby</TrackName><ArtistID>0</ArtistID><AlbumID>0</AlbumID><Start>0</Start><Count> 20</Count>
</GetTracks></SOAP-ENV:Body></SOAP-ENV:Envelope>我遇到的问题是,对于AuthenticationHeader元素,我必须定义一个前缀,但不应该将其附加到开头。这正是我需要生成的,这样才不会从web服务中得到错误:
<AuthenticationHeader xmlns:i="http://www.w3.org/2001/XMLSchema-instance">而如果我在名称创建过程中生成一个前缀,它会自动添加到xmlns属性之后和元素的最开始处。
我试图查看整个javax.xml.soap包,但找不到任何可以帮助我解决此问题的方法。您能给我一个提示,告诉我生成这样的xml应该往哪个方向走吗?
顺便说一句,我想知道这是否是web服务拒绝合法xml的有效行为?这种解释行为的动机是什么?
谢谢!
发布于 2009-10-21 22:58:43
Java SOAP API通常假定它们与之对话的服务符合规范,因此细粒度前缀控制之类的东西不会通过API公开,因为应该没有理由关心它。
在以前的类似情况下,我经常不得不手动构造SOAP DOM对象,这非常痛苦。
最近,我有相当好的运气让Spring WebServices生成我想要的东西。它抽象了SAAJ API,同时仍然提供了钩子,以便在XML级别使用DOM。我建议你试一试,看看你能想出什么。
https://stackoverflow.com/questions/1601294
复制相似问题