java - JAXB 的混合内容不适用于 WSDL

标签 java web-services netbeans jaxb wsimport

我正在使用 NetBeans 并且我有两个项目:

  • 用于生成 Web 服务并将其部署到 GlassFish 的 EJB 模块
  • 用于测试和使用此网络服务的简单控制台客户端

对于网络服务,我使用的是包含混合内容元素的 XSD。 使用以下代码为 JAXB 导入添加绑定(bind)文件:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
 xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
 xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc" jaxb:extensionBindingPrefixes="xjc"
 jaxb:version="2.0">
  <jaxb:globalBindings generateMixedExtensions="true"/>
</jaxb:bindings>

它生成了这段代码:

@XmlMixed
@OverrideAnnotationOf
protected List<Serializable> contentOverrideForED;

我可以接受这个生成的代码,尽管它并不理想。

我的问题出在客户端上,为此我在生成和部署的 web 服务中添加了一个 Web 服务引用,仅在本地主机上运行。

WSDL Customization: External Binding File 中使用相同的绑定(bind)文件不会生成 content 代码,也不会直接将其用作 Wsimport 的选项,也没有将其用作 Jaxb 选项。我感觉这个设置不知何故被忽视了,但如何呢?

为什么最初的 JAXB 生成包含它而 wsimport 为什么不使用它?我在这里有点困惑。

最佳答案

好问题!我和我的同事花了很多时间来解决我用 wsimport 生成的类中的混合类型。我尝试了很多调整并得到 List<Object> , List<Serializable>List<String> .我们使用了简单的 wsimport 但我们不知道:

<jaxb:globalBindings generateMixedExtensions="true"/>

现在,我建议您创建简单的 wsimport 批处理脚本并发布给客户。我认为您可以在 wsimport 脚本中使用外部绑定(bind)文件(-b 参数)。


Martin Grebac wrote great article关于这个主题:

it is a good decision to avoid use of mixed content, especially when designing a large schema with a lot of type extensions. Mapping that kind of schema to any binding framework is usually complex and leads to complications and slowdown of development. JAXB has never been designed to handle these cases in a convenient way - it is a Java <-> XML mapping framework, and it's not possible to represent this kind of content in a hierarchy of Java objects.

我完全同意 Martin 的观点。 JAXB 是简单的 Java <-> XML 映射框架。但它是现有的一种定制,解决了一个 XSD 中多种混合类型的问题。即generateMixedExtensions="true" .这种定制改变了 JAXB 的行为。


I'd really like to know why wsimport does this differently from xjc  

我认为当使用 xjc 和 wsimport 使用没有这种定制的简单 JAXB 时,您正在改变 JAXB 的行为。

请查看wsimport 2.0wsimport 2.1参数文档。这是关于 mixed content model 的链接如果你在混合类型中使用 xs:any can you adjust it .

关于java - JAXB 的混合内容不适用于 WSDL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20288862/

相关文章:

java - 如何保存完整的网页

java - 从 fragment 膨胀 Activity 时出错 : InflateException

c# - 需要 ASP.NET Web 服务的安全方案

c# - 使用 asp.net 通过移动应用发送文件上传的步骤

java - 使用 Java 解析 JSON 数据时遇到问题

Java运算符,解释

java - 我收到 nullpointerException 请帮助 :)

java - 异步网络服务 SOAP

java - (JAVA) 如何使用事件监听器添加多个数字?

tomcat - 将war文件放到tomcat服务器后如何启动netbeans项目?