2009-10-21 65 views
1

我基于SAAJ客户端生成以下XML并将其发送到.NET Web服务:操纵空间前缀在SAAJ /原始XML访问内SAAJ

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

谢谢!

+0

.net Web服务,特别是早期的Web服务,在Java世界中因为不符合规范而臭名昭着,只在会话的两端都是.net时才工作。他们已经在这方面变得更好了,但仍然有很多旧的服务,如果前缀不符合预期,那些服务会让人不知所措。 – skaffman 2009-10-21 14:55:16

回答

1

Java SOAP API通常假定它们的对话服务符合规范,因此细粒度前缀控制等内容不会通过API公开,因为应该没有理由关心。

在之前的例子中,我经常不得不求助于SOAP DOM对象的手动构造,这是非常痛苦的。

最近,我得到Spring WebServices正确地产生我以后的好运。它抽象了SAAJ API,同时仍然在XML级别提供挂钩来关闭和肮脏的DOM。我建议尝试一下,看看你能想出什么。

+0

谢谢你给我一个跟随的方向! 我仍然想知道是否有一些SAAJ配置文件或JRE指令可以控制前缀生成过程。 – Yuriy 2009-10-21 15:12:20