1

我正在写一个 nexus oss 插件。我的服务器向这个 nexus oss 应用程序发出了一个休息请求,nexus oss 为其发送了响应。但正如我在Empty uri in rest response中所建议的那样,它会按照那里的建议引发错误。感谢@Blaise Doughan。因此,回答者@Blaise Doughan 建议将包名称与响应相匹配,以匹配服务器中的包名称。所以我这样做了。所以这解决了将来会出现的潜在问题(包名称问题)。但它仍然抛出同样的错误。

因此,为了调试,我使用了其他一些应用程序(使用“apache cxf”),服务器不会为其抛出此类错误。我发现 xml 响应是

<ns2:com.collabnet.teamforge.ia.GetConfigurationParametersResponse
 xmlns:ns2="http://www.collab.net/teamforge/integratedapp"/>

但是对于我的应用程序(使服务器抛出错误),响应是

<com.collabnet.teamforge.ia.GetConfigurationParametersResponse/>

因此,我在这些响应中发现的唯一潜在差异是名称空间“ http://www.collab.net/teamforge/integratedapp ”。在链接的答案中,@Blaise Doughan 建议响应似乎来自 xstream 。然后我后来确认了nexus oss内部使用了xstream。

所以问题来了。在xstream网站上我发现了这个注意:

为什么 XStream 没有任何命名空间支持?

不是每个 XML 解析器都支持命名空间,也不是每个支持命名空间的 XML 解析器都可以在 XStream 中配置为使用它们。基本上,不同的 XML 解析器必须单独支持命名空间,而目前在 XStream 中实现的命名空间的唯一支持是 StAX 解析器。因此使用并配置 XStream 的 StaxDriver 以使用命名空间。

这让我感觉 xstream 不支持命名空间,因此它不会在响应中发送命名空间。所以我的服务器想要的 uri 设置为命名空间“ http://www.collab.net/teamforge/integratedapp ”。但是使用 xstream 的 nexus oss 不会发送命名空间作为响应。

问题 1:我不相信插件会被赋予如此大的权力来配置驱动程序(StaxDriver),如注释中所建议的那样。这是基于我的 nexus oss 代码演练。那么有没有其他方法可以从插件本身做到这一点?

问题 2:如果问题 1 没有解决方案,这是否意味着我必须调整 nexus oss 代码?按照http://blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-xstream.html “应用命名空间”标题下的建议制作默认命名空间。这是最终的解决方案吗?因为不建议对核心nexus oss进行更改,因为在nexus oss升级时会出现问题。

问题3:即使建议使用balise调用staxDriver的方式作为解决方案,但问题是我的nexus oss内部使用了XppDriver

nexus restlet 插件

nexus 客户端核心 xstream

因此,由于该应用程序内部仅使用 XppDriver ,我是否可以应用 blaise 在他的博客中所说的内容?因为 Blaise 在该博客中使用 StaxDriver 来设置命名空间(并且他补充说只有 StaxDriver 允许此命名空间设置以及上面在“为什么 XStream 没有任何命名空间支持?”主题下提到的官方 xstream 注释证实了这一点)。

请帮忙。

谢谢

4

1 回答 1

2

您可以通过添加一个名为xmlns保存命名空间的字段来伪造 XStream

@XStreamAsAttribute
private String xmlns = "http://www.collab.net/teamforge/integratedapp";
于 2013-08-07T15:42:16.280 回答