部署调用其他Web服务并使用xml签名的Web服务

时间:2012-10-23 11:01:06

标签: web-services java-ee weblogic axis2 saaj

我的目标是创建一个使用Soap(SAAJ)调用另一个Web服务的Web服务。用户调用我的Web服务并发送我签名的XML文件(字符串),然后发送到目标Web服务。目标Web服务使用签名的XML进行回复,其签名我必须在我的Web服务中进行验证,如果一切正常,则将该回复发送给我的用户。目标Web服务还要求我使用HTTPS /单向ssl握手。

以下是我编写的代码,当我将其作为常规程序进行测试时,一切正常。之后我做了一些小的改动,并尝试使用Eclipse和本地Tomcat服务器将其作为Web服务进行测试,它也起作用 - 我可以使用WSDL调用方法并获得预期的结果。这是问题 - 我必须在独立的Weblogic(10.3.6)服务器上部署我的Web服务,它就不再起作用了。我遵循了在JDeveloper中创建Web服务的教程,并将其部署到(集成和独立)服务器,但方法调用无法正常工作。我怀疑问题出在Weblogic安全性的某处以及它使用证书的方式,我已经添加了我必须用于ssl握手到Weblogic密钥库配置的密钥库,但它没有帮助。

@WebService
public class Test {

// Keystore containing multiple certificates I am using to sign xml which I send to target web service
private static final String KEY_STORE_TYPE = "JKS";
private static final String KEY_STORE_FILE = "C:\\Certificates\\mycert.jks";
private static final String KEY_STORE_PASS = "mypass";

// Keystore which I use to validate the signed message I receive from target web service
private static final String TARGET_KEY_STORE_TYPE = "JKS";
private static final String TARGET_KEY_STORE_FILE = "C:\\Certificates\\othercert.jks";
private static final String TARGET_KEY_STORE_PASS = "otherpass";
private static final String TARGET_KEY_ALIAS = "othercert";

// Keystore which I use for one way ssl handshake when connecting to target web service
private static final String TRUSTED_STORE_TYPE = "JKS";
private static final String TRUSTED_STORE_FILE = "C:\\Certificates\\truststore.jks";
private static final String TRUSTED_STORE_PASS = "trustpass";

// Target web service which I'm connecting to
private static final String SERVICE_URL = "https://service.i-am.using:1111/AnotherWebService";

// Attribute used in signing xml
private static final String ID = "testId";

// Method which user calls to sign and send his message to target web service which returns signed reply with data. Since there are multiple certificates (for multiple users) in keystore user must supply certificate alias and password
@WebMethod
public String getData(String user_message, String alias, String passwd) {
    String reply = "Unexpected error";
    SOAPMessage message = null;
    try {
        message = createSoapMessage(user_message);
        message = signMessage(message, alias, passwd);
        message = sendSoapMessage(message);
        Boolean value = false;
        value = verifyMessage(message);
        if (value == false) throw new Exception ("Message received from target web service is not correctly signed!");
        reply = stringFromSoap(message);
    } catch (Exception e) {
            reply = "Error! "+e.toString();
    }
    return reply;
}

// Method for testing whether target web service is available
@WebMethod
public String testResponse(){
    String reply = "Unexpected error";
    SOAPMessage response = null;
    try {
        response = createEchoMessage();
        // THIS CALL DOESN'T WORK WHEN EVEN WHEN I ADD KEYSTORE TO WEBLOGIC KEYSTORE CONFIGURATION
        response = sendSoapMessage(response);
        reply = stringFromSoap(response);
    } catch (Exception e) {
        reply = "Error! "+e.toString();
    }
    return reply;
}

// Method for creating Soap message used in testResponse method. Implementation is not important, here it is only as a signature.
private SOAPMessage createEchoMessage();

// Method for creating Soap message from string. Implementation is not important, here it is only as a signature.
private SOAPMessage createSoapMessage(String input_msg);

// Method for creating string from Soap message. Implementation is not important, here it is only as a signature.
private String stringFromSoap(SOAPMessage message);

// Method that sends Soap message to target server and receives reply
private SOAPMessage sendSoapMessage(SOAPMessage message) throws Exception {

    // Key used for one way ssl
    KeyStore keyStore = KeyStore.getInstance(TRUSTED_STORE_TYPE);
    keyStore.load(
        new FileInputStream(TRUSTED_STORE_FILE),  
        TRUSTED_STORE_PASS.toCharArray()
    );

    TrustManagerFactory tmf = TrustManagerFactory.getInstance("PKIX");
    tmf.init(keyStore);

    SSLContext sslctx = SSLContext.getInstance("SSL");
    sslctx.init(null, tmf.getTrustManagers(), null);

    HttpsURLConnection.setDefaultSSLSocketFactory(sslctx.getSocketFactory());

    SOAPConnectionFactory sfc = SOAPConnectionFactory.newInstance();
    SOAPConnection connection = sfc.createConnection();

    SOAPMessage response = null;

    try{
        URL endpoint =
                  new URL(new URL(SERVICE_URL),
                          "",
                          new URLStreamHandler() {
                            @Override
                            protected URLConnection openConnection(URL url) {
                                URLConnection dummy = null;
                                try{
                                    URL target = new URL(url.toString());
                                    URLConnection connection = target.openConnection();
                                    // Timeout settings
                                    connection.setConnectTimeout(1000); // 1 sec
                                    connection.setReadTimeout(5000); // 5 sec
                                    return(connection);
                                }
                                catch (Exception e){
                                    return dummy;
                                }
                            }
                          });
        response = connection.call(message, endpoint);
    }
    catch (Exception e){
        throw e;
    }
    connection.close();
    return response;
}

// Method for signing xml
@SuppressWarnings({ "unchecked", "rawtypes", "serial" })
private static SOAPMessage signMessage(SOAPMessage message, String alias, String passwd) throws Exception {

    // Read SOAP message
    SOAPMessage doc = message;
    SOAPPart soapPart = doc.getSOAPPart();

    // Find id for signing
    Node nodeToSign = null;
    Node sigParent = null;
    String referenceURI = null;
    XPathExpression expr = null; 
    NodeList nodes;
    List transforms = null;

    XPathFactory factory = XPathFactory.newInstance();
    XPath xpath = factory.newXPath();

    expr = xpath.compile(
            String.format("//*[@Id='%s']", ID)
        );
        nodes = (NodeList) expr.evaluate(soapPart, XPathConstants.NODESET);
        if (nodes.getLength() == 0) {
            throw new Exception("No node with id: " + ID);
        }

    nodeToSign = nodes.item(0);
    sigParent = nodeToSign;
    referenceURI = "#" + ID;


    // Prepare signature
    String providerName = System.getProperty(
            "jsr105Provider", 
            "org.jcp.xml.dsig.internal.dom.XMLDSigRI"
            );

    final XMLSignatureFactory sigFactory = XMLSignatureFactory.getInstance(
                        "DOM",
                        (Provider) Class.forName(providerName).newInstance()
                     );

    // Transformations used for signing
    transforms = new ArrayList<Transform>(){{
        add(sigFactory.newTransform(
                Transform.ENVELOPED, 
                (TransformParameterSpec) null )

        );
        add(sigFactory.newTransform(CanonicalizationMethod.EXCLUSIVE, (TransformParameterSpec) null
        )
        );
    }};

    // Get key for signing
    KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE);
    keyStore.load(
        new FileInputStream(KEY_STORE_FILE),  
        KEY_STORE_PASS.toCharArray()
    );

    PrivateKey privateKey = (PrivateKey) keyStore.getKey(
                    alias,
                    passwd.toCharArray()
                );

    X509Certificate cert = (X509Certificate) keyStore.getCertificate(alias);

    // Create a reference to enveloped document
    Reference ref = sigFactory.newReference(
            referenceURI,
            sigFactory.newDigestMethod(DigestMethod.SHA1, null),
            transforms,
            null, 
            null
            );

    // Create SignedInfo
    SignedInfo signedInfo = sigFactory.newSignedInfo(
                    sigFactory.newCanonicalizationMethod(
                    CanonicalizationMethod.EXCLUSIVE, 
                    (C14NMethodParameterSpec) null
                    ), 
                    sigFactory.newSignatureMethod(
                    SignatureMethod.RSA_SHA1, 
                    null
                    ),
                    Collections.singletonList(ref)
                );

    // Create KeyInfo
    KeyInfoFactory keyinfoFactory = sigFactory.getKeyInfoFactory(); 

    X509IssuerSerial issuer= keyinfoFactory.newX509IssuerSerial(cert.getIssuerX500Principal().getName(), cert.getSerialNumber());

    List x509Content = new ArrayList();
    x509Content.add(cert);
    x509Content.add(cert.getSubjectX500Principal().getName());
    x509Content.add(issuer);
    X509Data xd = keyinfoFactory.newX509Data(x509Content);
    KeyInfo keyInfo = keyinfoFactory.newKeyInfo(Collections.singletonList(xd));

    // Create DOMSignContext
    DOMSignContext dsc = new DOMSignContext(
                 privateKey, 
                 sigParent
                 );
            System.out.println(dsc.toString());

    // Create XMLSignature
    XMLSignature signature = sigFactory.newXMLSignature(signedInfo, keyInfo);

    // Generate and sign - THIS IS WHERE THE PROGRAM FAILS WHEN I CONVERT IT TO WEBLOGIC WEBSERVICE
    signature.sign(dsc);

    // Save changes on Soap message
    doc.saveChanges();

    return doc;
}

// Method used to verify message received from targer server
private Boolean verifyMessage(SOAPMessage message) throws Exception{

    Boolean verified = false;

    // Create xml from Soap message
    SOAPMessage msg = message;
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    msg.writeTo(out);

    XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    Document doc = dbf.newDocumentBuilder().parse(new ByteArrayInputStream(out.toByteArray()));

    // Check whether Signature element exists in XML message
    NodeList nl = doc.getElementsByTagNameNS(XMLSignature.XMLNS,"Signature");
    if (nl.getLength() == 0) {
        throw new Exception("Signature element doesn't exist!");
    }

    // Get key which will be used for verification
    KeyStore keyStore = KeyStore.getInstance(TARGET_KEY_STORE_TYPE);
    keyStore.load(
        new FileInputStream(TARGET_KEY_STORE_FILE),  
        TARGET_KEY_STORE_PASS.toCharArray()
    );

    X509Certificate cert = (X509Certificate) keyStore.getCertificate(TARGET_KEY_ALIAS);
    PublicKey publicKey = cert.getPublicKey();

    // Create validation context and signature
    DOMValidateContext valContext = new DOMValidateContext(publicKey, nl.item(0));
    XMLSignature signature = fac.unmarshalXMLSignature(valContext);

    // Check whether the document is properly signed
    verified = signature.validate(valContext);

    return verified;
}
}

这是我在调用testResponse方法时遇到的错误:

com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Message send failed

我将keystore添加到Weblogic密钥库配置错误消息后更改为:

<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
<S:Body>
    <S:Fault>
        <S:Code>
            <S:Value>S:Receiver</S:Value>
        </S:Code>
        <S:Reason>
            <S:Text xml:lang="en">502 HTTP Analyzer Bad Gateway Connection refused: connect</S:Text>
        </S:Reason>
        <S:Detail>
            <ns2:exception xmlns:ns2="http://jax-ws.dev.java.net/"
                class="java.net.ConnectException" note="An exception occured while connecting to https://localhost:7202/test/TestPort.">
                <message>Connection refused: connect</message>
                <ns2:stackTrace>
                    <ns2:frame class="java.net.PlainSocketImpl"
                        file="PlainSocketImpl.java" line="-2" method="socketConnect"/>
                    <ns2:frame class="java.net.PlainSocketImpl"
                        file="PlainSocketImpl.java" line="351" method="doConnect"/>
                    <ns2:frame class="java.net.PlainSocketImpl"
                        file="PlainSocketImpl.java" line="213" method="connectToAddress"/>
                    <ns2:frame class="java.net.PlainSocketImpl"
                        file="PlainSocketImpl.java" line="200" method="connect"/>
                    <ns2:frame class="java.net.SocksSocketImpl"
                        file="SocksSocketImpl.java" line="366" method="connect"/>
                    <ns2:frame class="java.net.Socket"
                        file="Socket.java" line="529" method="connect"/>
                    <ns2:frame class="java.net.Socket"
                        file="Socket.java" line="478" method="connect"/>
                    <ns2:frame class="java.net.Socket"
                        file="Socket.java" line="375" method="&lt;init>"/>
                    <ns2:frame class="java.net.Socket"
                        file="Socket.java" line="218" method="&lt;init>"/>
                    <ns2:frame
                        class="javax.net.DefaultSocketFactory"
                        file="SocketFactory.java" line="212" method="createSocket"/>
                    <ns2:frame class="HTTPClient.HTTPConnection"
                        file="HTTPConnection.java" line="3606" method="getSocket"/>
                    <ns2:frame class="HTTPClient.HTTPConnection"
                        file="HTTPConnection.java" line="4364" method="doConnect"/>
                    <ns2:frame class="HTTPClient.HTTPConnection"
                        file="HTTPConnection.java" line="3358" method="sendRequest"/>
                    <ns2:frame class="HTTPClient.HTTPConnection"
                        file="HTTPConnection.java" line="3281" method="handleRequest"/>
                    <ns2:frame class="HTTPClient.HTTPConnection$9"
                        file="HTTPConnection.java" line="3032" method="run"/>
                    <ns2:frame class="HTTPClient.HTTPConnection$9"
                        file="HTTPConnection.java" line="3023" method="run"/>
                    <ns2:frame
                        class="HTTPClient.HttpClientConfiguration"
                        file="HttpClientConfiguration.java"
                        line="666" method="doAction"/>
                    <ns2:frame class="HTTPClient.HTTPConnection"
                        file="HTTPConnection.java" line="5401" method="doAction"/>
                    <ns2:frame class="HTTPClient.HTTPConnection"
                        file="HTTPConnection.java" line="3023" method="setupRequest"/>
                    <ns2:frame class="HTTPClient.HTTPConnection"
                        file="HTTPConnection.java" line="1524" method="ExtensionMethod"/>
                    <ns2:frame
                        class="oracle.jdevimpl.webservices.tcpmonitor.config.NetworkAccessRule"
                        file="NetworkAccessRule.java" line="1403" method="getResponseDefault"/>
                    <ns2:frame
                        class="oracle.jdevimpl.webservices.tcpmonitor.config.NetworkAccessRule"
                        file="NetworkAccessRule.java" line="325" method="getResponse"/>
                    <ns2:frame
                        class="oracle.jdevimpl.webservices.tcpmonitor.config.PassThroughRule"
                        file="PassThroughRule.java" line="135" method="execute"/>
                    <ns2:frame
                        class="oracle.jdevimpl.webservices.tcpmonitor.config.Rule"
                        file="Rule.java" line="473" method="fire"/>
                    <ns2:frame
                        class="oracle.jdevimpl.webservices.tcpmonitor.ConnectionHandler"
                        file="ConnectionHandler.java" line="558" method="getResponse"/>
                    <ns2:frame
                        class="oracle.jdevimpl.webservices.tcpmonitor.ConnectionHandler"
                        file="ConnectionHandler.java" line="412" method="run"/>
                    <ns2:frame
                        class="java.util.concurrent.Executors$RunnableAdapter"
                        file="Executors.java" line="441" method="call"/>
                    <ns2:frame
                        class="java.util.concurrent.FutureTask$Sync"
                        file="FutureTask.java" line="303" method="innerRun"/>
                    <ns2:frame
                        class="java.util.concurrent.FutureTask"
                        file="FutureTask.java" line="138" method="run"/>
                    <ns2:frame
                        class="java.util.concurrent.ThreadPoolExecutor$Worker"
                        file="ThreadPoolExecutor.java" line="886" method="runTask"/>
                    <ns2:frame
                        class="java.util.concurrent.ThreadPoolExecutor$Worker"
                        file="ThreadPoolExecutor.java" line="908" method="run"/>
                    <ns2:frame class="java.lang.Thread"
                        file="Thread.java" line="662" method="run"/>
                </ns2:stackTrace>
            </ns2:exception>
        </S:Detail>
    </S:Fault>
</S:Body>

调用getData方法时出现以下错误消息:

<S:Envelope>
<S:Body>
    <S:Fault>
        <faultcode>S:Server</faultcode>
        <faultstring>UNIMPLEMENTED</faultstring>
        <detail>
            <ns2:exception class="java.lang.AssertionError" note="To disable this feature, set com.sun.xml.ws.fault.SOAPFaultBuilder.disableCaptureStackTrace system property to false">
                <message>UNIMPLEMENTED</message>
                <ns2:stackTrace>
                    <ns2:frame class="weblogic.xml.domimpl.DocumentImpl" file="DocumentImpl.java" line="407" method="getElementById" />
                    <ns2:frame class="com.sun.org.apache.xml.internal.security.utils.IdResolver" file="IdResolver.java" line="146" method="getElementByIdUsingDOM" />
                    <ns2:frame class="com.sun.org.apache.xml.internal.security.utils.IdResolver" file="IdResolver.java" line="113" method="getElementById" />
                    <ns2:frame class="com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverFragment" file="ResolverFragment.java" line="92" method="engineResolve" />
                    <ns2:frame class="com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolver" file="ResourceResolver.java" line="263" method="resolve" />
                    <ns2:frame class="org.jcp.xml.dsig.internal.dom.DOMURIDereferencer" file="DOMURIDereferencer.java" line="95" method="dereference" />
                    <ns2:frame class="org.jcp.xml.dsig.internal.dom.DOMReference" file="DOMReference.java" line="370" method="dereference" />
                    <ns2:frame class="org.jcp.xml.dsig.internal.dom.DOMReference" file="DOMReference.java" line="304" method="digest" />
                    <ns2:frame class="org.jcp.xml.dsig.internal.dom.DOMXMLSignature" file="DOMXMLSignature.java" line="470" method="digestReference" />
                    <ns2:frame class="org.jcp.xml.dsig.internal.dom.DOMXMLSignature" file="DOMXMLSignature.java" line="366" method="sign" />
                    <ns2:frame class="test.WebServis" file="WebServis.java" line="391" method="signMessage" />
                    <ns2:frame class="test.WebServis" file="WebServis.java" line="117" method="getJIR" />
                    <ns2:frame class="sun.reflect.NativeMethodAccessorImpl" file="NativeMethodAccessorImpl.java" line="native" method="invoke0" />
                    <ns2:frame class="sun.reflect.NativeMethodAccessorImpl" file="NativeMethodAccessorImpl.java" line="57" method="invoke" />
                    <ns2:frame class="sun.reflect.DelegatingMethodAccessorImpl" file="DelegatingMethodAccessorImpl.java" line="43" method="invoke" />
                    <ns2:frame class="java.lang.reflect.Method" file="Method.java" line="601" method="invoke" />
                    <ns2:frame class="weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker" file="WLSInstanceResolver.java" line="92" method="invoke" />
                    <ns2:frame class="weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker" file="WLSInstanceResolver.java" line="74" method="invoke" />
                    <ns2:frame class="com.sun.xml.ws.server.InvokerTube$2" file="InvokerTube.java" line="151" method="invoke" />
                    <ns2:frame class="com.sun.xml.ws.server.sei.EndpointMethodHandlerImpl" file="EndpointMethodHandlerImpl.java" line="268" method="invoke" />
                    <ns2:frame class="com.sun.xml.ws.server.sei.SEIInvokerTube" file="SEIInvokerTube.java" line="100" method="processRequest" />
                    <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="866" method="__doRun" />
                    <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="815" method="_doRun" />
                    <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="778" method="doRun" />
                    <ns2:frame class="com.sun.xml.ws.api.pipe.Fiber" file="Fiber.java" line="680" method="runSync" />
                    <ns2:frame class="com.sun.xml.ws.server.WSEndpointImpl$2" file="WSEndpointImpl.java" line="403" method="process" />
                    <ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit" file="HttpAdapter.java" line="539" method="handle" />
                    <ns2:frame class="com.sun.xml.ws.transport.http.HttpAdapter" file="HttpAdapter.java" line="253" method="handle" />
                    <ns2:frame class="com.sun.xml.ws.transport.http.servlet.ServletAdapter" file="ServletAdapter.java" line="140" method="handle" />
                    <ns2:frame class="weblogic.wsee.jaxws.WLSServletAdapter" file="WLSServletAdapter.java" line="171" method="handle" />
                    <ns2:frame class="weblogic.wsee.jaxws.HttpServletAdapter$AuthorizedInvoke" file="HttpServletAdapter.java" line="708" method="run" />
                    <ns2:frame class="weblogic.security.acl.internal.AuthenticatedSubject" file="AuthenticatedSubject.java" line="363" method="doAs" />
                    <ns2:frame class="weblogic.security.service.SecurityManager" file="SecurityManager.java" line="146" method="runAs" />
                    <ns2:frame class="weblogic.wsee.util.ServerSecurityHelper" file="ServerSecurityHelper.java" line="103" method="authenticatedInvoke" />
                    <ns2:frame class="weblogic.wsee.jaxws.HttpServletAdapter$3" file="HttpServletAdapter.java" line="311" method="run" />
                    <ns2:frame class="weblogic.wsee.jaxws.HttpServletAdapter" file="HttpServletAdapter.java" line="336" method="post" />
                    <ns2:frame class="weblogic.wsee.jaxws.JAXWSServlet" file="JAXWSServlet.java" line="99" method="doRequest" />
                    <ns2:frame class="weblogic.servlet.http.AbstractAsyncServlet" file="AbstractAsyncServlet.java" line="99" method="service" />
                    <ns2:frame class="javax.servlet.http.HttpServlet" file="HttpServlet.java" line="820" method="service" />
                    <ns2:frame class="weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction" file="StubSecurityHelper.java" line="227" method="run" />
                    <ns2:frame class="weblogic.servlet.internal.StubSecurityHelper" file="StubSecurityHelper.java" line="125" method="invokeServlet" />
                    <ns2:frame class="weblogic.servlet.internal.ServletStubImpl" file="ServletStubImpl.java" line="301" method="execute" />
                    <ns2:frame class="weblogic.servlet.internal.TailFilter" file="TailFilter.java" line="26" method="doFilter" />
                    <ns2:frame class="weblogic.servlet.internal.FilterChainImpl" file="FilterChainImpl.java" line="56" method="doFilter" />
                    <ns2:frame class="oracle.security.jps.ee.http.JpsAbsFilter$1" file="JpsAbsFilter.java" line="119" method="run" />
                    <ns2:frame class="java.security.AccessController" file="AccessController.java" line="native" method="doPrivileged" />
                    <ns2:frame class="oracle.security.jps.util.JpsSubject" file="JpsSubject.java" line="315" method="doAsPrivileged" />
                    <ns2:frame class="oracle.security.jps.ee.util.JpsPlatformUtil" file="JpsPlatformUtil.java" line="442" method="runJaasMode" />
                    <ns2:frame class="oracle.security.jps.ee.http.JpsAbsFilter" file="JpsAbsFilter.java" line="103" method="runJaasMode" />
                    <ns2:frame class="oracle.security.jps.ee.http.JpsAbsFilter" file="JpsAbsFilter.java" line="171" method="doFilter" />
                    <ns2:frame class="oracle.security.jps.ee.http.JpsFilter" file="JpsFilter.java" line="71" method="doFilter" />
                    <ns2:frame class="weblogic.servlet.internal.FilterChainImpl" file="FilterChainImpl.java" line="56" method="doFilter" />
                    <ns2:frame class="oracle.dms.servlet.DMSServletFilter" file="DMSServletFilter.java" line="139" method="doFilter" />
                    <ns2:frame class="weblogic.servlet.internal.FilterChainImpl" file="FilterChainImpl.java" line="56" method="doFilter" />
                    <ns2:frame class="weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction" file="WebAppServletContext.java" line="3730" method="wrapRun" />
                    <ns2:frame class="weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction" file="WebAppServletContext.java" line="3696" method="run" />
                    <ns2:frame class="weblogic.security.acl.internal.AuthenticatedSubject" file="AuthenticatedSubject.java" line="321" method="doAs" />
                    <ns2:frame class="weblogic.security.service.SecurityManager" file="SecurityManager.java" line="120" method="runAs" />
                    <ns2:frame class="weblogic.servlet.internal.WebAppServletContext" file="WebAppServletContext.java" line="2273" method="securedExecute" />
                    <ns2:frame class="weblogic.servlet.internal.WebAppServletContext" file="WebAppServletContext.java" line="2179" method="execute" />
                    <ns2:frame class="weblogic.servlet.internal.ServletRequestImpl" file="ServletRequestImpl.java" line="1490" method="run" />
                    <ns2:frame class="weblogic.work.ExecuteThread" file="ExecuteThread.java" line="256" method="execute" />
                    <ns2:frame class="weblogic.work.ExecuteThread" file="ExecuteThread.java" line="221" method="run" />
                </ns2:stackTrace>
            </ns2:exception>
        </detail>
    </S:Fault>
</S:Body>

我已经阅读了一些关于Web服务和安全性的Weblogic文档,但似乎我看不到树木的木材。如果有人能给我一些指示,我将非常感激。另外,作为最后的手段,如果我使用Axis2重写代码并且可以将此类Web服务成功部署到Weblogic,它会有所帮助吗?

0 个答案:

没有答案