Java 让JBoss7使用您选择的自定义自顶向下的WSDL定义,而无需CXF生成WSDL

Java 让JBoss7使用您选择的自定义自顶向下的WSDL定义,而无需CXF生成WSDL,java,jboss,wsdl,cxf,Java,Jboss,Wsdl,Cxf,我们正在将自顶向下(wsdl优先)ws从jboss4移动到jboss7,并且在使用CXF时遇到了一些困难。我注意到大型wsdl文件位于 独立\data\wsdl\x.ear\x.war\x.wsdl 不是从提供的xsd集生成的,它似乎是从类生成的。例如,JBoss4中的定义读取(模糊化) CXF生成的一个将所有coice元素替换为minoccurs=0,对于我们的实际使用完全无效 <xs:element name="x"> <xs:complexType> <x

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


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来实现这一点,所以。。。讨论

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

所以读了之后就简单多了

此处的说明列出了两个选项:

1) 将FoodDocumentImpl类上的@WebService注释更新为 具有与中的值匹配的serviceName/portName属性 wsdl

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

首先,如果您没有使用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>

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