微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何声明在jar文件中的xsd文件中定义的复杂数据类型的元素

如何解决如何声明在jar文件中的xsd文件中定义的复杂数据类型的元素

我在Spring启动项目的jar依赖文件中有一个xsd下面的文件。 xsd没有声明元素声明,这是Spring Boot验证所必需的。因此,我试图在我的项目资源文件夹中添加一个xsd来声明元素类型。

JSD文件中的XSD: /wsdl/xsd/UserService-v1-0.xsd

<?xml version="1.0" encoding="utf-8"?>

<xsd:schema targetNamespace="http://usermanagement.com/userservice/xsd/2014/07"
            xmlns="http://www.w3.org/2001/XMLSchema"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:userservice="http://usermanagement.com/userservice/xsd/2014/07"
            
            elementFormDefault="qualified">

  <xsd:import namespace="http://usermanagement.com/userservice/common/xsd/2014/09" schemaLocation="userserviceCommon-v1-0.xsd"/>
  <xsd:import namespace="http://usermanagement.com/userserviceabsolute/common/xsd/2014/09" schemaLocation="userserviceAbsoluteCommon-v1-0.xsd"/>

 
  <xsd:complexType name="GetUsersRequest">
    <xsd:attribute name="language" type="xsd:language" use="optional" default="en" />
  </xsd:complexType>

</xsd:schema>

请注意,我试图通过删除本文中的某些元素来使复杂类型保持简单。文件的位置是/ wsdl / xsd。

XSD以在主项目资源中声明元素: /wsdl/xsd/UserService-type-v1-0.xsd

<?xml version="1.0" encoding="utf-8"?>

<xsd:schema targetNamespace="http://usermanagement.com/userservice/wsdl/userserviceService-v1-0"
  xmlns="http://www.w3.org/2001/XMLSchema"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:userservice="http://usermanagement.com/userservice/xsd/2014/07"
  elementFormDefault="qualified">

    <import namespace="http://usermanagement.com/userservice/xsd/2014/07" schemaLocation="jar:file://{path to the jar}/!/wsdl/xsd/userserviceService-v1-0.xsd"/>


  <element name="GetUsersRequest" type="userservice:GetUsersRequest"/>

</xsd:schema>

根据我的理解,我们需要使用符号“ jar:file:// {jar的路径} /!/ wsdl / xsd / userserviceService-v1-0.xsd”来引用jar中xsd文件的schemaLocation。 但是我不确定如何声明jar的路径。也不确定这是否是引用jar文件中xsd中定义的唯一方法。在上述方法中,无论何时发布新版本的jar,我们都需要更新xsd文件

包括Spring WS模式验证配置:

@Configuration
public class MyWsValidatorConfig extends WsConfigurerAdapter {

    @Override
    public void addInterceptors(List<EndpointInterceptor> interceptors) {
        PayloadValidatingInterceptor validatingInterceptor = new PayloadValidatingInterceptor();
        validatingInterceptor.setValidateRequest(true);
        validatingInterceptor.setValidateResponse(true);
        validatingInterceptor.setXsdSchemaCollection(new XsdSchemaCollection() {
            @Override
            public XsdSchema[] getXsdSchemas() {
                return null;
            }

            @Override
            public XmlValidator createValidator() {
                try {
                    return XmlValidatorFactory.createValidator(getSchemas(),"http://www.w3.org/2001/XMLSchema");
                } catch (Exception e) {
                    log.error("Failed to create validator e={}",e);
                }
                return null;
            }

            public Resource[] getSchemas() {
                List<Resource> schemaResources = new ArrayList<>();
                schemaResources.add(new ClassPathResource("/wsdl/xsd/UserService-v1-0.xsd"));
                schemaResources.add(new ClassPathResource("/wsdl/xsd/UserService-type-v1-0.xsd"));
                return schemaResources.toArray(new Resource[schemaResources.size()]);
            }
        });
        interceptors.add(validatingInterceptor);
    }

}

这是我第一次使用XSD和SOAP Web服务。能够克服其他障碍,但被这个问题困扰。

请帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。