01: /*
02: * Copyright 2001-2004 The Apache Software Foundation.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package samples.security;
18:
19: import org.apache.axis.AxisFault;
20: import org.apache.axis.Handler;
21: import org.apache.axis.Message;
22: import org.apache.axis.MessageContext;
23: import org.apache.axis.components.logger.LogFactory;
24: import org.apache.axis.handlers.BasicHandler;
25: import org.apache.axis.message.SOAPEnvelope;
26: import org.apache.commons.logging.Log;
27:
28: public class ClientSigningHandler extends BasicHandler {
29: static Log log = LogFactory.getLog(ClientSigningHandler.class
30: .getName());
31:
32: static {
33: org.apache.xml.security.Init.init();
34: }
35:
36: public void invoke(MessageContext msgContext) throws AxisFault {
37: /** Sign the SOAPEnvelope
38: */
39: try {
40: Handler serviceHandler = msgContext.getService();
41: String filename = (String) getOption("keystore");
42: if ((filename == null) || (filename.equals("")))
43: throw new AxisFault(
44: "Server.NoKeyStoreFile",
45: "No KeyStore file configured for the ClientSigningHandler!",
46: null, null);
47: Message requestMessage = msgContext.getRequestMessage();
48: SOAPEnvelope unsignedEnvelope = requestMessage
49: .getSOAPEnvelope();
50: // need to correctly compute baseuri
51: SignedSOAPEnvelope signedEnvelope = new SignedSOAPEnvelope(
52: msgContext, unsignedEnvelope,
53: "http://xml-security", filename);
54: requestMessage = new Message(signedEnvelope);
55: msgContext.setCurrentMessage(requestMessage);
56: // and then pass on to next handler
57: //requestMessage.getSOAPPart().writeTo(System.out);
58: } catch (Exception e) {
59: throw AxisFault.makeFault(e);
60: }
61: }
62:
63: public void onFault(MessageContext msgContext) {
64: try {
65: // probably needs to fault.
66: } catch (Exception e) {
67: log.error(e);
68: }
69: }
70: }
|