Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringWebService中从WSDL而不是XSD公开Web服务_Java_Spring Ws - Fatal编程技术网

Java 在SpringWebService中从WSDL而不是XSD公开Web服务

Java 在SpringWebService中从WSDL而不是XSD公开Web服务,java,spring-ws,Java,Spring Ws,在我们的项目中,我们使用SpringWebService。配置文件如下所示: @EnableWs @Configuration public class WebServiceConfiguration extends WsConfigurerAdapter { @Override public void addInterceptors(List<EndpointInterceptor> interceptors) { PayloadValidating

在我们的项目中,我们使用SpringWebService。配置文件如下所示:

@EnableWs
@Configuration
public class WebServiceConfiguration extends WsConfigurerAdapter {
    @Override
    public void addInterceptors(List<EndpointInterceptor> interceptors) {
        PayloadValidatingInterceptor validatingInterceptor = new PayloadValidatingInterceptor();
        validatingInterceptor.setValidateRequest(true);
        validatingInterceptor.setValidateResponse(true);
        validatingInterceptor.setXsdSchema(customerSchema());
        interceptors.add(validatingInterceptor);
    }

    @Bean
    public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "/abc/ws/*");
    }

    @Bean(name = "someInterface")
    public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema priceListSchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("SomePortType");
        wsdl11Definition.setLocationUri("/abc/ws/someInterface");
        wsdl11Definition.setTargetNamespace("someNamespace");
        wsdl11Definition.setSchema(priceListSchema);
        return wsdl11Definition;
    }

    @Bean
    public XsdSchema customerSchema() {
        return new SimpleXsdSchema(new ClassPathResource("SomeXsd.xsd"));
    }
}
@EnableWs
@配置
公共类WebServiceConfiguration扩展了WsConfigurerAdapter{
@凌驾
公共void附加侦听器(列表侦听器){
PayloadValidatingInterceptor validatingInterceptor=新的PayloadValidatingInterceptor();
validatingInterceptor.setValidateRequest(true);
validatingInterceptor.setValidateResponse(true);
验证interceptor.setXsdSchema(customerSchema());
添加(验证Interceptor);
}
@豆子
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext ApplicationContext){
MessageDispatcherServlet servlet=new MessageDispatcherServlet();
setApplicationContext(applicationContext);
setTransformWsdlLocations(true);
返回新的ServletRegistrationBean(servlet,“/abc/ws/*”);
}
@Bean(name=“someInterface”)
公共默认WSDL11Definition默认WSDL11Definition(XsdSchema priceListSchema){
DefaultWsdl11Definition wsdl11Definition=新的DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName(“SomePortType”);
wsdl11Definition.setLocationUri(“/abc/ws/someInterface”);
setTargetNamespace(“someNamespace”);
wsdl11Definition.setSchema(priceListSchema);
返回wsdl11Definition;
}
@豆子
公共XsdSchema customerSchema(){
返回新的simplexsdsdschema(新的类路径资源(“SomeXsd.xsd”);
}
}

wsdl的XSD文件是我们保存在类路径中的SomeXsd.XSD。但是我想知道我是否拥有将公开的wsdl文件,而不是以这种方式生成wsdl。如何公开已经存在的wsdl?

您是否尝试删除以下内容

   @Bean(name = "someInterface")
    public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema priceListSchema) {
        DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
        wsdl11Definition.setPortTypeName("SomePortType");
        wsdl11Definition.setLocationUri("/abc/ws/someInterface");
        wsdl11Definition.setTargetNamespace("someNamespace");
        wsdl11Definition.setSchema(priceListSchema);
        return wsdl11Definition;
    }
加上这个

 @Bean
    public WsdlDefinition myWsdl() {
        return new SimpleWsdl11Definition(new ClassPathResource("/myWsdl.wsdl"));
    }

您仍然需要验证程序的xsd。您可能还需要更多配置

您尝试过SimpleWsdl11Definition吗?不,您能详细说明一下吗?我只有wsdl,没有其他内容。如果我仍然需要指定内联到wsdl的xsd,我仍然需要进行返工,从wsdl内部提取xsd,创建一个新的xsd文件,将其存储在我的类路径中,然后在代码中指定。这比jaxws有点困难,在jaxws中,我只需要从wsdl生成实现类,就可以对它们进行契约优先的Web服务开发。我同意,并尝试在wsdl中使用导入功能(为了不复制xsd)但是显示的wsdl具有“导入xsd”而不是xsd内联。。。。因此,我最终需要维护两个xsd……是的,这就是问题所在