2016-01-18 53 views
1

使用spring-ws做基於SOAP的應用程序。但是,如果我添加此以下依賴(從春季引導教程https://spring.io/guides/gs/producing-web-service/鋸),分離Spring-WS和Spring-Webmvc

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

它還引入spring-webmvc。如果我排除它,

 <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-logging</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-webmvc</artifactId> 
      </exclusion> 
     </exclusions> 

我在這裏得到錯誤;

@Bean 
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) { 
    MessageDispatcherServlet servlet = new MessageDispatcherServlet(); 
    //ERROR Here 
    //cannot find symbol 
    //symbol: method setApplicationContext(ApplicationContext) 
    //location: variable servlet of type MessageDispatcherServlet 
    servlet.setApplicationContext(applicationContext); 
    servlet.setTransformWsdlLocations(true); 
    return new ServletRegistrationBean(servlet, "/ws/*"); 
} 

它們是不是分開模塊?爲什麼我必須使用spring-webmvc,當我只需要spring-ws

我在這裏不明白?

+0

請詳細說明。 (1)你能不能排除你的屁股? (2)您可以發佈實際錯誤(使用堆棧跟蹤)。 – Tim

+0

@Tim:這是編譯時錯誤。在IDE中顯示。並更新了問題。 – Raj

+0

在這種情況下,您包含的錯誤消息顯然不是直接複製的。該消息會說更像「沒有方法setApplicationContext上....」請逐字粘貼。 – Tim

回答

2

spring-ws-core需要spring-webmvc,你不能避免,因爲一些核心的Spring-WS類建立在Spring-WebMVC類(包括MessageDispatcherServlet)之上。

spring-ws-core POM定義了spring-webmvc

的顯式依賴從https://repo1.maven.org/maven2/org/springframework/ws/spring-ws-core/2.2.4.RELEASE/spring-ws-core-2.2.4.RELEASE.pom

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-webmvc</artifactId> 
    <version>4.0.9.RELEASE</version> 
    <scope>compile</scope> 
</dependency> 

在Maven中添加排除是很少一個好主意 - 有時你需要做的,但你很漂亮很多人說你認爲你比包裝工更瞭解圖書館的依賴關係,你可能不會。

至於錯誤消息,MessageDispatcherServlet繼承自org.springframework.web.servlet.FrameworkServlet,它打包在spring-webmvc。在FrameworkServlet上定義的setApplicationContext方法,但僅在4.x版本的Spring-WebMVC中添加。

當您添加排除項目時,看起來最終結果是您的舊版本的spring-webmvc從setApplicationContext被添加到FrameworkServlet之前。