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