0

我们正在将一个自上而下(首先是 wsdl)ws 从 jboss4 移动到 jboss7,并且在使用 CXF 时遇到了一些困难。我注意到位于standalone\data\wsdl\x.ear\x.war\x.wsdl 中的大wsdl 文件不是从提供的xsd 集生成的,它似乎是从类中生成的。例如,我们从 JBoss4 中的定义读取(混淆)

<element name="x">
<complexType>
<sequence>
<element minOccurs="0" name="x" type="x"/>
<choice>
<element name="x" type="x"/>
<element name="x" type="x"/>
<element name="x" type="x"/>
<element name="x" type="x"/>
<element name="x" type="x"/>
</choice>
</sequence>
</complexType>
</element>

而CXF生成的那个把coice元素全部替换为minoccurs = 0,完全不适合我们实际使用。

<xs:element name="x">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="x" type="xs:string"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
<xs:element minOccurs="0" name="x" type="ns1:x"/>
</xs:sequence>
</xs:complexType>
</xs:element>

这是因为 wsconsume 构建了我们的 java 类,并且对它们进行了很好的注释,可以被 cxf 解析,但还不足以真正呈现 complexTypes 的初始意图,所以看了很多之后,如何让 Jboss 7 使用 WSDL 定义您的选择,无需 CXF 生成 wsdl?我们不会使用 Spring 来实现这一点,所以……讨论!

4

1 回答 1

0

因此在@webservice 注释中设置 wsdlLocation 会导致此处描述的错误

http://mail-archives.apache.org/mod_mbox/cxf-users/200806.mbox/%3C1932ACF3-DCD2-4073-83DD-981FC0F68F53@apache.org%3E

所以阅读后变得简单多了

那里的方向列出了两个选项:

1) 更新 FooDocumentImpl 类上的 @WebService 注释,使其具有与 wsdl 中的值匹配的 serviceName/portName 属性。

2) 更新配置中的元素以添加服务名称和端口名称的 qnames。

第一个是如果你不使用 Spring,那么在显式地将 @WebService 注释带到:

@WebService(endpointInterface = "main.package.InterfaceWS", serviceName = "InterfaceWSService", name = "InterfaceWS", targetNamespace = "http://Interface.namespace.main", wsdlLocation = "WEB-INF/wsdl/InterfaceWS.wsdl" ,portName="InterfaceWSPort")

匹配 InterfaceWS.wsdl 中的服务描述:

<service name="InterfaceWSService">
                    <port binding="tns:InterfaceWSSOAPBinding" name="InterfaceWSPort">
                              <soap:address location="http://localhost:8080/publishedLocationOfInterface />
                    </port>
</service>

它就像一个魅力

于 2013-03-11T21:31:04.890 回答