我有一个弹簧服务于我有架构中的一个目录:

  • 安装/DataContract/人。划
  • 安装/DataContract/子的人。划

在那里亚人。文件中包括的人。文件:

在人。文件:

<xsd:import     namespace="http://www.mynamespace.org/xml/sub-person" 
                schemaLocation="sub-person.xsd"/>

我定义的wsdl为:

<bean id="personserv" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">   
  <property name="schemaCollection" ref="schemaCollection"/>                                               
  <property name="portTypeName" value="personserv"/>                                
  <property name="locationUri" value="/ws/personnelService/"/>                              
  <property name="targetNamespace" value="http://www.mynamespace.org/definitions"/>       
</bean>

我可以访问wsdl文件的使用:

http://localhost:8080/myapp/ws/personnelService/personserv.wsdl

然而,当使用这个wsdl客户可以读取人。文件并无法获取子的人。文件给人一种错误的失败负荷

http://localhost:8080/myapp/ws/personnelService/sub-person.xsd

我的问题是怎样才能让子的人。文件可在该URI的位置?

我也已经改变指定的位置。文件:

<xsd:import     namespace="http://www.mynamespace.org/xml/sub-person" 
                schemaLocation="/DataContract/sub-person.xsd"/>

客户然后试着找到的子的人。文件:

http://localhost:8080/sub-person.xsd 这是不正确的。

另一种尝试是:

<xsd:import     namespace="http://www.mynamespace.org/xml/sub-person" 
                schemaLocation="DataContract/sub-person.xsd"/>

客户然后试着找到的子的人。文件:

http://localhost:8080/myapp/ws/personnelService/DataContract/sub-person.xsd

有帮助吗?

解决方案

弹簧WS有这个 真漂亮的设施 为处理此,使用Apache XML识共享项目:

<bean id="schemaCollection" class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection">
    <property name="xsds">
        <list>
            <value>/DataContract/person.xsd</value>
            <value>/DataContract/sub-person.xsd</value>
        </list>
    </property>
    <property name="inline" value="true"/>
</bean>

inline 财产是关键的-它会读取在每个架构的文件,及时发现一个 importinclude 参照从一个到另一个,它将替换参与内容的参考文件。

这个效果是,出的WSDL代控制器是一个单一的文件与所有架构的信息内联,同时仍然保持各种模式的文件单独的服务器。然后你不必担心如果客户可以追参考和解决他们正确,因为有 没有引用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top