Apache CXF配置使Weblogic应用程序崩溃

时间:2018-06-28 13:14:01

标签: java java-ee soap weblogic cxf

我试图遵循CXF的指导方针使其在Weblogic下工作,因为我没有努力,而是无法在应用程序中调用CXF拦截器。

我发现here必须相应地配置weblogic.xml(我有战争,没有耳朵),但是当我用以下方法设置weblogic.xml时:

<weblogic-web-app xmlns="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.8/weblogic-web-app.xsd">

<jsp-descriptor>
    <keepgenerated>true</keepgenerated>
    <debug>true</debug>
</jsp-descriptor>
<context-root>/SoapBasicAuth</context-root>

<container-descriptor>
    <prefer-application-packages>
        <package-name>javax.jws.*</package-name>
    </prefer-application-packages>
</container-descriptor>

</weblogic-web-app>

在部署过程中出现此错误:

<Ιουν 28, 2018 3:42:23,200 μμ EEST> <Warning> <Deployer> <BEA-149078> <Stack trace for message 149004
weblogic.application.ModuleException: java.lang.ClassNotFoundException: javax.jws.WebService
    at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
    at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)
    at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
    Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassNotFoundException: javax.jws.WebService
    at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:1029)
    at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:990)
    at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:104)
    at weblogic.utils.classloaders.GenericClassLoader.doFindClass(GenericClassLoader.java:611)
    at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:543)

我的应用程序的其余部分如下(以防万一有人发现由于其他原因未调用拦截器,请通知!)

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" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <display-name>
        JavaWs
    </display-name>

   <servlet>
        <servlet-name>cxfservlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>cxfservlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

    <security-constraint>
        <display-name>SecureConstraint</display-name>

        <web-resource-collection>
            <web-resource-name>Secure folders</web-resource-name>
            <url-pattern>/views/* </url-pattern>
        </web-resource-collection>

        <auth-constraint>
            <role-name>Administrators</role-name>
        </auth-constraint>
    </security-constraint>

     <login-config>
    <auth-method>CLIENT-CERT,FORM</auth-method>
       <!--  <auth-method>FORM</auth-method> -->
        <realm-name>myrealm</realm-name>
        <form-login-config>
            <form-login-page>/views/login.xhtml</form-login-page>
            <form-error-page>/views/loginError.xhtml</form-error-page>
        </form-login-config>
    </login-config>

    <security-role>
        <role-name>Administrators</role-name>
    </security-role>

</web-app>

HelloWorld.java SOAP服务

package gr.teohaik.soapbasicauth;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.naming.NamingException;
import org.apache.cxf.interceptor.InInterceptors;


@WebService
@InInterceptors(interceptors = 
        {"gr.teohaik.soapbasicauth.BasicAuthAuthorizationInterceptor", 
    "gr.teohaik.soapbasicauth.SoapActionInInterceptor"})
public class HelloWorld {

    @WebMethod(operationName = "sayHelloMethod")
    public String sayHello(@WebParam(name = "name") String name) throws NamingException {
        return "hello from " + name;
    }
}

BasicAuthAuthorizationInterceptor

   package gr.teohaik.soapbasicauth;

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    import org.apache.cxf.binding.soap.interceptor.SoapHeaderInterceptor;
    import org.apache.cxf.configuration.security.AuthorizationPolicy;
    import org.apache.cxf.endpoint.Endpoint;
    import org.apache.cxf.interceptor.Fault;
    import org.apache.cxf.message.Exchange;
    import org.apache.cxf.message.Message;
    import org.apache.cxf.transport.Conduit;
    import org.apache.cxf.transport.Destination;
    import org.apache.cxf.ws.addressing.EndpointReferenceType;

    public class BasicAuthAuthorizationInterceptor extends SoapHeaderInterceptor {

        @Override
        public void handleMessage(Message message) throws Fault {

            AuthorizationPolicy policy = message.get(AuthorizationPolicy.class);
            // If the policy is not set, the user did not specify credentials.
            // 401 is sent to the client to indicate that authentication is required.
            if (policy == null) {
                sendErrorResponse(message, HttpURLConnection.HTTP_UNAUTHORIZED);
                return;
            }
            String username = policy.getUserName();
            String password = policy.getPassword();

            // CHECK USERNAME AND PASSWORD
            if (!checkLogin(username, password)) {
                System.out.println("handleMessage: Invalid username or password for user: " +policy.getUserName());
                sendErrorResponse(message, HttpURLConnection.HTTP_FORBIDDEN);
            }
        }

        //.....
    }

pom.xml

<pom>

<properties>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <cxf.version>3.2.5</cxf.version>
    <spring.version>4.3.8.RELEASE</spring.version>
</properties>

<dependencies>

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-web-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>6.1</version>
</dependency>

<!--        CXF     -->
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-ws-security</artifactId>
    <version>3.2.5</version>
</dependency>

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-core</artifactId>
    <version>${cxf.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>${cxf.version}</version>
</dependency>

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>${cxf.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
</dependency>

</pom>

0 个答案:

没有答案