2014-01-06 108 views
0

我有一個使用struts2,spring和hibernate框架的web應用程序。現在我想通過soap web服務公開它的一些方法。我有一門課,我只是使用@WebService註釋和一個服務端點接口對它進行註釋。現在,當我在glassfish上部署我的應用程序時,它部署得很好,但是當我嘗試通過glasssfish管理控制檯訪問wsdl時。它給了我以下錯誤。java struts2 hibernate和spring應用程序和soap web服務

There is no Action mapped for namespace [/] and action name [UsersControllerImplService] associated with context path [/ossoc]. 

我明白它與配置有關的東西,但我無法弄清楚什麼配置。

的web.xml

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

     <display-name>ossoc</display-name> 


     <listener> 
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
     </listener> 

     <filter> 
      <filter-name>struts2</filter-name> 
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
     </filter> 

     <filter-mapping> 
      <filter-name>struts2</filter-name> 
      <url-pattern>/*</url-pattern> 
     </filter-mapping> 

     <welcome-file-list> 
      <welcome-file>/index.jsp</welcome-file> 
     </welcome-file-list> 

    </web-app> 

struts2.xml

<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
    <constant name="struts.objectFactory" value="spring" /> 

    <package name="user" namespace="/" extends="struts-default"> 
     <interceptors> 
      <interceptor name="authentication" class="com.riteshsangwan.ossoc.core.interceptors.AuthenticationInterceptor"></interceptor> 
      <interceptor-stack name="authStack"> 
       <interceptor-ref name="authentication"></interceptor-ref> 
       <interceptor-ref name="defaultStack"></interceptor-ref> 
      </interceptor-stack> 
     </interceptors> 

     <default-interceptor-ref name="authStack"></default-interceptor-ref> 

     <global-results> 
      <result name="login" type="redirect">/index.action</result> 
     </global-results> 

     <action name="register" class="com.riteshsangwan.ossoc.core.actions.RegisterAction"> 
      <interceptor-ref name="defaultStack"></interceptor-ref> 
      <result name="success">/index.jsp</result> 
      <result name="error">/register.jsp</result> 
      <result name="input">/register.jsp</result> 
     </action> 

     <action name="login" class="com.riteshsangwan.ossoc.core.actions.LoginAction"> 
      <interceptor-ref name="defaultStack"></interceptor-ref> 
      <result name="success">/user/home.jsp</result> 
      <result name="error">/index.jsp</result> 
      <result name="input">/index.jsp</result> 
     </action> 

     <action name="activate" class="com.riteshsangwan.ossoc.core.actions.ActivateAction"> 
      <interceptor-ref name="defaultStack"></interceptor-ref> 
      <result name="success">/user/home.jsp</result> 
      <result name="error">/index.jsp</result> 
      <result name="input">/index.jsp</result> 
     </action> 



     <action name="index"> 
      <interceptor-ref name="defaultStack"></interceptor-ref> 
      <result>/index.jsp</result> 
     </action> 

     <action name="home"> 
      <result>/user/home.jsp</result> 
     </action> 

     <action name="showfiles" class="com.riteshsangwan.ossoc.core.actions.ShowFiles"> 
      <result name="success">/user/files.jsp</result> 
     </action> 

     <action name="edit"> 
      <result>/user/edit.jsp</result> 
     </action> 

     <action name="logout" class="com.riteshsangwan.ossoc.core.actions.LogoutAction"> 
      <result name="success">/index.jsp</result> 
     </action> 

     <action name="changepassword" class="com.riteshsangwan.ossoc.core.actions.ChangePassword"> 
      <result name="success">/user/edit.jsp</result> 
     </action> 

     <action name="upload" class="com.riteshsangwan.ossoc.core.actions.UploadFile"> 
      <result>/user/home.jsp</result> 
     </action> 

     <action name="showgrid" class="com.riteshsangwan.ossoc.core.actions.ShowFiles"> 
      <result name="success">/user/files.jsp</result> 
     </action> 

     <action name="deletefile" class="com.riteshsangwan.ossoc.core.actions.DeleteFile"> 
      <result name="success">/user/files.jsp</result> 
     </action> 

     <action name="downloadfile" class="com.riteshsangwan.ossoc.core.actions.DownloadFile"> 
      <result name="success" type="stream"> 
       <param name="contentType"></param> 
       <param name="inputName"></param> 
       <param name="contentDisposition"></param> 
       <param name="bufferSize"></param> 
       <param name="allowCaching"></param> 
       <param name="contentLength"></param> 
      </result> 
     </action> 

    </package> 

</struts> 

的applicationContext.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" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> 

     <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 


     <!-- Database Configuration --> 

    <import resource="DataSource.xml"/> 
    <import resource="HibernateSessionFactory.xml"/> 

    <!-- Beans Declaration --> 
    <import resource="UsersBean.xml"/> 

</beans> 
+0

您在瀏覽器中輸入的URL無法映射到配置中的操作? –

+1

@玻璃魚管理控制檯@RomanC這是鏈接 http:// localhost:8080/ossoc/UsersControllerImplService?wsdl – user3108790

回答

2

爲什麼每個人都在這裏是如此渴望否決。

這是問題所在。 web.xml struts2過濾器已映射/* url pattern,因此struts2將過濾每個請求,包括對webservice servlet的請求。由於過濾器在servlet之前執行,所以我得到的操作未映射錯誤。 來自struts2的文檔。 動作映射擴展名已更改爲.action加上「」,這意味着如果我只是在地址欄中輸入servlet的名稱,struts2會將其作爲動作並檢查struts2.xml是否有相關的動作映射,因爲沒有動作映射它會拋出錯誤。

解決方案 我剛纔添加的擴展名URL後URL模式映射這樣的struts2會當作一個servlet請求其他選項將使用

<constant name="struts.action.excludePattern" value="URLTOEXCLUDE"/> 
and configure the webservice to use the excluded URL 

希望這會幫助別人。

相關問題