1

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

谢谢!

4

1 回答 1

1

Java SOAP API 通常假定与它们交谈的服务符合规范,因此像细粒度前缀控制这样的事情不会通过 API 暴露出来,因为没有理由关心。

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

最近,我相当幸运地让Spring WebServices产生了我所追求的东西。它抽象了 SAAJ API,同时仍然提供了在 XML 级别处理 DOM 的钩子。我建议试一试,看看你能想出什么。

于 2009-10-21T14:58:43.100 回答