Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.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 弹簧靴-休息和肥皂组合_Java_Spring_Rest_Soap_Spring Boot - Fatal编程技术网

Java 弹簧靴-休息和肥皂组合

Java 弹簧靴-休息和肥皂组合,java,spring,rest,soap,spring-boot,Java,Spring,Rest,Soap,Spring Boot,我需要编写一个如下工作的应用程序: @Bean public ServletRegistrationBean WsRegistrationBean(ApplicationContext applicationContext) { MessageDispatcherServlet servlet = new MessageDispatcherServlet(); servlet.setApplicationContext(applicationContext); servl

我需要编写一个如下工作的应用程序:

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

@Bean
public ServletRegistrationBean RsRegistrationBean(ApplicationContext applicationContext) {
    DispatcherServlet servlet = new DispatcherServlet();
    servlet.setApplicationContext(applicationContext);
    return new ServletRegistrationBean(servlet, "/a/*");
}
  • 我可以用通常的soap方式将soap文档发布到/a/abc

  • 我可以得到/a/abc,然后返回200/Ok。这只是一个测试,看看该方法是否存在

  • 正确的方法是什么?我还没有看到在SOAP上下文中执行GET的方法。我尝试创建REST和SOAP bean,如下所示:

    @Bean
    public ServletRegistrationBean WsRegistrationBean(ApplicationContext applicationContext) {
        MessageDispatcherServlet servlet = new MessageDispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        servlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(servlet, "/a/*");
    }
    
    @Bean
    public ServletRegistrationBean RsRegistrationBean(ApplicationContext applicationContext) {
        DispatcherServlet servlet = new DispatcherServlet();
        servlet.setApplicationContext(applicationContext);
        return new ServletRegistrationBean(servlet, "/a/*");
    }
    
    然而这不起作用,SOAP bean似乎赢了。如果我注释掉soapbean,我的REST控制器将正确处理GET请求,但是如果我将soapbean留在那里,我将得到一个“405/methodnotallowed”


    这些可以共存并让Rest控制器处理GET,而POST可以用SOAP方式处理吗?或者还有其他方法吗?

    我没有找到答案,但我有一个解决办法:

  • 将rest控制器移动到不同的url上下文(例如/b/abc)
  • 将nginx放在应用程序前面
  • 让nginx将请求“GET/a/abc”重写为“GET/b/abc”

  • 到目前为止,这似乎适合我的需要。可能有多种方法可以做到这一点,但我无法用内置的tomcat解决这个问题,nginx方法将重定向保持在应用程序外部。

    您正在将两个servlet映射到/a的相同url上下文。我建议你为它们使用不同的路径,因为你迟早会在发布时遇到问题。不幸的是,我的要求是获取并发布到相同的url上下文。我必须使用get来测试Iuri上下文是否存在,如果它存在,那么我可以使用soap来测试该上下文。嗯,听起来是一个非常奇怪的要求?Get只是为了检查端点是否存在吗?然后可能实现一个虚拟操作,也称为Soap服务。不幸的是,这是Windows 8.1和Windows 10使用的Microsoft MDM discovery server规范中的一个设计。这是一个有点丑陋的设计,它混淆了REST和SOAP的概念。是的,这意味着在开始交易之前检查服务器是否有正确的API。我现在对下面的答案中的url重写解决方案还可以,不过我希望我知道如何在应用程序中实现它。至于你的建议,我不知道如何进行SOAP GET(无论这意味着什么),它似乎被405拒绝了。