我遇到了一个奇怪的问题,即我的webservice所使用的架构与我工作区中的架构不匹配。在我的工作区中,元素具有以下定义:
<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" />
这会导致服务的用户查看在线架构并且他们没有看到我对该元素施加的限制的问题。
有谁知道这里发生了什么,或者为什么?
答案 0 :(得分:0)
缺少的是从WSDL生成Java bean框架时复制WSDL文件。有一个名为“将WSDL复制到项目”的复选框。我设置了复选框,然后重新生成了Java代码。 WSDL被复制到EJB项目的META-INF,服务实现将MyServiceSOAPImpl.java中@WebService
注释的wsdlLocation属性设置为META-INF/myService.WSDL
。我不喜欢文件夹布局所以我将其更改为META-INF/wsdl/MyService/myService.WSDL
(并更新了MyServiceSOAPImpl.java中的Java引用) - 我注意到在RAD 7中无法指定目标目录,但在RAD 8.5中有。。
似乎如果没有提供WSDL,运行时会动态生成WSDL。生成的代码在注释中有限制,但它没有在代码中实现,所以我猜这就是为什么运行时生成的WSDL和模式将元素作为一个简单的字符串,没有限制,因为它基于Java看起来不正确(但也许这是一个已知的问题?)。