0

我遇到了一个奇怪的问题,我的 web 服务附带的架构与我的工作区中的架构不匹配。在我的工作区中,一个元素具有以下定义:

            <xsd:element name="checkFooBars" minOccurs="1" nillable="false">
                <xsd:simpleType>
                    <xsd:restriction base="xsd:string">
                        <xsd:enumeration value="Y"/>
                        <xsd:enumeration value="N"/>
                    </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>

可从应用程序(通过此 URL: www.myapplication.com/MyApplicationHttpRouter/MyService/MyService_schema1.xsd)访问的架构中的相同元素如下所示:

<xs:element name="checkFooBars" type="xs:string" /> 

这会导致服务用户查看在线模式而看不到我对元素设置的限制的问题。

有谁知道这里发生了什么,或者为什么?

4

1 回答 1

0

从 WSDL 生成 Java bean 骨架时缺少的是复制 WSDL 文件。有一个名为“将 WSDL 复制到项目”的复选框。我设置了复选框,然后重新生成了 Java 代码。WSDL 被复制到 EJB 项目的 META-INF 中,并且服务实现将@WebServiceMyServiceSOAPImpl.java 中注释的 wsdlLocation 属性设置为META-INF/myService.WSDL。我不喜欢文件夹布局,所以我将其更改为META-INF/wsdl/MyService/myService.WSDL(并更新了 MyServiceSOAPImpl.java 中的 Java 引用)——我注意到在 RAD 7 中没有办法指定目标目录,但在 RAD 8.5 中有。

似乎如果未提供 WSDL,则运行时会即时生成 WSDL。生成的代码在注释中有限制,但它没有在代码中实现,所以我猜这就是为什么运行时生成的 WSDL 和模式将元素作为简单字符串而没有限制,因为它基于看起来不正确的 Java (但也许这是一个已知问题?)。

于 2013-04-08T20:54:27.950 回答