这个wsdl片段是非法的吗?

时间:2011-10-26 19:25:16

标签: wsdl

我在挠头。此WSDL由CXF生成。它喜欢输入的WSDL和模式文件,但是当我尝试创建测试项目时,SOAPUI正在抱怨。整个wsdl太长了,但这里是与错误消息匹配的部分:

<xs:complexType name="RelatedResourcesType">
    <xs:sequence>
      <xs:element minOccurs="0" name="RelatedResource">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="tns:CompoundResourceIdentifierType">
              <xs:sequence>
                <xs:element minOccurs="0" name="link">
                  <xs:complexType>
                    <xs:sequence/>
                    <xs:attribute ref="ns3:type" xmlns:ns3="http://www.w3.org/1999/xlink"/>
                    <xs:attribute ref="ns4:href" use="required" xmlns:ns4="http://www.w3.org/1999/xlink"/>
                    <xs:attribute ref="ns5:role" xmlns:ns5="http://www.w3.org/1999/xlink"/>
                    <xs:attribute ref="ns6:title" xmlns:ns6="http://www.w3.org/1999/xlink"/>
                    <xs:attribute ref="ns7:label" xmlns:ns7="http://www.w3.org/1999/xlink"/>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
        ...


...

错误:无法找到属性'type @ http://www.w3.org/1999/xlink'您的意思是引用名为type @ http://dws.sec?

的属性

错误:未找到属性'href @ http://www.w3.org/1999/xlink'

错误:无法找到属性'role @ http://www.w3.org/1999/xlink'您的意思是引用名为role @ http://www.w3.org/2003/05的属性/皂信封?

错误:找不到属性'title @ http://www.w3.org/1999/xlink'您的意思是引用名为title @ http://metadata.esd.com/?

错误:无法找到属性'label @ http://www.w3.org/1999/xlink'您的意思是引用名为title @ http://metadata.esd.com/?

所以这些都应该来自xlink定义,我不确定为什么它没有看到它。有什么想法吗?或建议下一步尝试什么?

1 个答案:

答案 0 :(得分:1)

我成功进行了更改,允许Visual Studio 2008从服务器检索WSDL并生成代码。步骤是

1)配置CXF以显示原始WSDL文件而不是其生成的版本 2)将导入的模式更改为在WSDL中内联,直到Visual Studio开心

详细说明:

1)在CXF配置文件中添加wsdlLocation属性

<jaxws:endpoint xmlnse="urn:discovery.services.sec.com"
    id="DiscoveryImpl"
    endpointName="e:discovery"
    serviceName="e:DiscoveryService"
    address="discovery"
    implementor=com.sec.services.discovery.DiscoveryImpl"
    wsdlLocation="WEB-INF\discovery.wsdl
>

有几种方法可以指定WSDL位置。 Google代码搜索很有帮助。

2)最初的WSDL开始了                                                                                             ...                 
                        

删除上面的导入,结果是

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions ...>
    <wsdl:types>
        <xsd:schema ..> <!-- Discovery.xsd contents here -->
                ...
        </xsd:schema>   
    </xsd:types>
        <xsd:schema ..>
            <!-- import of Discovery.xsd removed from here -->
                ...
        </xsd:schema>   
    </xsd:types>
    <wsdl:message ...>

我希望这能节省一些其他时间。