使用 spring-boot 和 Weblogic 公开 SOAP Webservice

Posted

技术标签:

【中文标题】使用 spring-boot 和 Weblogic 公开 SOAP Webservice【英文标题】:Exposing SOAP Webservice with spring-boot and Weblogic 【发布时间】:2015-03-17 13:24:15 【问题描述】:

我正在编写一个我想在 Weblogic 12C 中部署的 spring-boot 应用程序。该应用程序公开了一个 SOAP Web 服务。当以独立模式运行应用程序时(spring-boot 使用嵌入式 tomcat 运行它)一切正常,我可以通过

访问 wsdl
http://localhost:8081/ws/springbootwstest.wsdl

但是,如果我在 Weblogic 中部署 application-war-file,则在成功部署应用程序本身时,Webservice 不可用。

我无法访问 wsdl。我已经按照说明 http://docs.spring.io/spring-boot/docs/1.2.2.BUILD-SNAPSHOT/reference/htmlsingle/#howto-weblogic 但结果还是一样。

所有来源都可以在这里找到: https://github.com/iljahell/springbootwstest.git

java版本“1.7.0_67”

spring-boot 1.2.0.RELEASE

Weblogic 12.1.3.0.0

【问题讨论】:

为什么 spring-boot-starter-ws 在 pom 中标记为提供?这将使该 jar 中的类及其依赖项对 WebLogic 不可用,这几乎肯定不是您想要的。 看看这是否有助于导航到您的 WSDL:***.com/questions/27902435/… @AndyWilkinson 谢谢,我更正了,但仍然无法正常工作 @DisplayNameismissing 应用程序的 url 是 localhost:7001/apiel-9.1.0-SNAPSHOT/ 。打开此 URL 会返回 403。打开服务 url localhost:7001/apiel-9.1.0-SNAPSHOT/ws/springbootwstest.wsdl 会返回 404 对于来这里的人docs.spring.io/spring-boot/docs/current/reference/html/… 可能会有所帮助。我面临着类似的问题,但使用的是古老的 Web Logic 10.3.6。并跟随一切。虽然我得到了 REST 和网页,但我仍然无法让 SOAP 端点工作 【参考方案1】:

在对 weblogic 12c 感到非常沮丧之后,我今天解决了这个问题。 Weblogic 仍然需要您像这样在 web.xml 中定义 spring ws 消息调度程序 servlet。确保你也将 spring boot 遗留依赖项添加到你的 pom 中。

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-legacy</artifactId>
        <version>1.0.2.RELEASE</version>
    </dependency>

另外,请确保从 Spring Boot ws 依赖项中排除嵌入式 tomcat:

 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web-services</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-websocket</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

然后

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>au.gov.qld.ambulance.mtaworkflow.webservices.SpringWsApplication</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
</listener>

<servlet>
    <servlet-name>spring-ws</servlet-name>
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
    <init-param>
        <param-name>transformWsdlLocations</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring-ws</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

</web-app>

然后添加一个与您的 servlet 名称匹配的空 servlet.xml,即。 spring-ws-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

最后,添加一个带有以下内容的 weblogic.xml:

<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-
web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 
http://xmlns.oracle.com/weblogic/weblogic-web-app 
http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
<wls:weblogic-version>12.1.1</wls:weblogic-version>
<wls:context-root>mtaworkflow</wls:context-root>
<wls:container-descriptor>
    <wls:prefer-application-packages>
        <wls:package-name>org.slf4j.*</wls:package-name>
        <wls:package-name>org.springframework.*</wls:package-name>
        <wls:package-name>javax.websocket.*</wls:package-name>
        <wls:package-name>javax.websocket.server.*</wls:package-name>
    </wls:prefer-application-packages>
</wls:container-descriptor>
</wls:weblogic-web-app>

【讨论】:

以上是关于使用 spring-boot 和 Weblogic 公开 SOAP Webservice的主要内容,如果未能解决你的问题,请参考以下文章

linux下如何启动和关闭weblogic

转载-WebLogic使用总结

weblogic虚拟路径的配置和使用

Weblogic中wlst的使用

Weblogic学习总结——配置和使用节点管理器

负载测试 BindException