简体   繁体   English

java struts2 hibernate和spring应用程序和soap web服务

[英]java struts2 hibernate and spring application and soap web services

I have a web application using struts2, spring and hibernate frameworks. 我有一个使用struts2,spring和hibernate框架的Web应用程序。 Now I want to expose some of its methods via soap web service. 现在我想通过soap web服务公开它的一些方法。 I have a class and I simply annotated it with @WebService annotation and an Service endpoint interface. 我有一个类,我只是用@WebService注释和服务端点接口注释它。 Now when I deploy my application on glassfish it deploys fine but when I try to access wsdl via glasssfish admin console. 现在,当我在glassfish上部署我的应用程序时,它部署得很好,但是当我尝试通过glasssfish管理控制台访问wsdl时。 It gives me the following error. 它给了我以下错误。

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

I understand its something related to configuration but I am unable to figure out what configuration. 我理解它与配置有关但我无法弄清楚配置是什么。

web.xml 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 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 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>

Why everyone here is so eager to vote down. 为什么这里的每个人都如此渴望投票。

This was the problem. 这是问题所在。 In web.xml the struts2 filter has /* url pattern mapped so struts2 will filter every request that comes to it including the request to the webservice servlet. web.xml ,struts2过滤器映射了/* url pattern因此struts2将过滤每个请求,包括对webservice servlet的请求。 Since filters execute before servlets so I was getting the action not mapped error. 由于过滤器在servlet之前执行所以我得到的操作没有映射错误。 From the struts2 documentation. 来自struts2文档。 The action mapping extension has been changed to .action plus "" it means if I simply enter name of servlet in the address bar the struts2 will take it as action and check struts2.xml for relevant action mapping since there are no action mapping so it will throw error. 动作映射扩展已更改为.action plus“”表示如果我只是在地址栏中输入servlet的名称,struts2将把它作为操作并检查struts2.xml以获取相关的操作映射,因为没有动作映射所以它会抛出错误。

Solution I just add the .extension after url in URL pattern mapping so struts2 will treat as a servlet request other option will to use 解决方案我只是在URL模式映射中的url之后添加.extension,因此struts2将视为servlet请求,其他选项将使用

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

Hope this helps others. 希望这有助于其他人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM