在SAAJ中操作SAAJ / raw xml访问中的名称空间前缀

时间:2009-10-21 14:41:14

标签: java xml soap namespaces axis

我的基于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的有效行为?这种解释行为的动机是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

Java SOAP API通常假设与他们交谈的服务符合规范,因此细粒度前缀控制等内容不会通过API公开,因为没有理由关注。

在以前的这种情况下,我经常不得不求助于SOAP DOM对象的手动构建,这非常痛苦。

最近,我已经有了相当好的运气让Spring WebServices完全按照我的要求生产。它抽象了SAAJ API,同时仍然提供了在XML级别下降和弄脏DOM的钩子。我建议试一试,看看你能想出什么。