Web Service 工具使您能够定义下列首选项:
当前存在的一个问题是:在“处理程序配置”向导中添加处理程序之后,向导将在项目的主要源文件夹中生成新的框架处理程序 Java 文件,除非处理程序 Java 文件已经存在于同一位置,并且尚未选择“不要覆盖可装入的 Java 类”。向导不会检查 EAR 中的其它位置是否存在具有相同标准名称的处理程序。因此,当使用向导来添加已经存在于 EAR 中的其它位置(例如,存在于项目中的另一个源文件夹或者存在于 EAR 的另一个模块中)的处理程序时,向导将编写新的框架处理程序,用来替代原始的处理程序类。如果发生这种情况,则应删除向导生成的框架处理程序。
当使用 IBM SOAP 运行时环境的时候,如果选择了“启用基于元素的映射”,则除了任何普通的基于类型的映射之外,现在 Web Service 向导还完全能够生成基于元素的映射。
如果不启用此首选项(这是缺省情况),则 Apache/IBM SOAP 运行环境可能不会与其它供应商的 Web Service 运行时环境(该环境发送其元素没有“xsi:type”属性的消息)互操作。其它供应商的 Web Service 运行时环境在包括 xsi:type 属性这一方面遵循不同的策略。某些策略总是包括这些属性。而某些策略永远也不会包括这些属性。某些策略提供了配置选项。某些策略对特定类型(例如,数组)省略 xsi:types。
IBM/Apache SOAP 运行时环境产生的典型错误是:
targetException=java.lang.IllegalArgumentException:找不到反序列化器以使用编码样式“http://schemas.xmlsoap.org/soap/encoding/”对“:MyElement”进行反序列化。 当启用了它时,将基于元素的映射生成到:基于元素的映射格式为:
<isd:map encodingStyle="encoding style" xmlns:x="some-namespace" qname="x:some-local-name" xml2JavaClassName="some-deserializer-class-name"/>基于元素的映射是为以下项生成的:
WSAD Web Service 向导遵循 SOAP 和 XSD 规范来确定基于元素的映射中的元素名称应当是限定的(即,具有名称空间)还是非限定的。
WSAD Web Service 向导遵循下列规则以决定是限定元素名称还是非限定元素名称:
某些运行时环境在 SOAP 消息中会生成非限定的元素,不管模式是不是通过 XSD 模式的“elementFormDefault”属性指定使用限定元素。在这种情况下,可能需要手工编辑服务的 WSDL 或 XSD 并将 elementFormDefault 更改为“unqualified”。
非限定名称空间的基于元素的映射的一个示例是:
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="" qname="x:name" xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>
限定名称空间的基于元素的映射的一个示例是:
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="http://www.ibm.com/" qname="x:name" xml2JavaClassName="org.apache.soap.encoding.soapenc.StringDeserializer"/>
请注意,对于给定的一个元素名称,将只生成一个基于元素的映射。即,如果模式多次使用同一元素名称但使用不同的类型,则将只随机选择其中一个元素来作为基于元素的映射的基础。将无法对其它名称相同但类型不同的元素进行反序列化。如果模式将同一名称用于元素以及用于 WSDL 部件,情况也是一样。
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:x="" qname="x:some-name" xml2JavaClassName="some-serializer"/>
XML 编辑器可能会标记以下错误:
The value of the attribute "xmlns:x" is invalid. Prefixed namespace bindings may not be empty.
此错误对于 WebSphere Application Server V4 是无害的。然而,不要尝试将此 dds.xml 部署到使用 Xerces 2.x (XML4J 4.x) 或更高版本(例如,WebSphere Application Server V5)的其它服务器。否则,在服务器装入 dds.xml 文件时将会产生类似的 Xerces 解析错误。应通过完成 Web Service 方案并选择正确的服务器类型来重新生成 dds.xml。这将为该服务器类型生成正确的 dds.xml。
另外,当尝试从该 ISD 文件部署 Web Service 时也会产生类似的 Xerces 解析错误。变通方法是手工将该文件编辑为以下格式:
<isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" qname="some-name" xml2JavaClassName="some-serializer"/>