001    /** 
002     * 
003     * Copyright 2004 Protique Ltd
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * You may obtain a copy of the License at 
008     * 
009     * http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS, 
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
014     * See the License for the specific language governing permissions and 
015     * limitations under the License. 
016     * 
017     **/
018    package org.codehaus.activesoap.policy.addressing;
019    
020    import org.codehaus.activesoap.HandlerRegistry;
021    import org.codehaus.activesoap.handler.Policy;
022    import org.codehaus.activesoap.handler.stax.AnyElementMarshaler;
023    import org.codehaus.activesoap.policy.addressing.handler.AttributedURIHandler;
024    import org.codehaus.activesoap.policy.addressing.handler.EndpointReferenceTypeHandler;
025    import org.codehaus.activesoap.policy.addressing.handler.RelationshipHandler;
026    
027    import javax.xml.namespace.QName;
028    
029    /**
030     * Represents an ActiveSOAP policy to maintain a WS-Addressing context via the
031     * {@link AddressingContext} class
032     *
033     * @version $Revision: 1.4 $
034     */
035    public class AddressingPolicy implements Policy {
036        public static final String DEFAULT_NAMESPACE = "http://schemas.xmlsoap.org/ws/2003/03/addressing";
037    
038        private AnyElementMarshaler anyContentMarshaler;
039    
040        public AddressingPolicy(AnyElementMarshaler anyContentMarshaler) {
041            this.anyContentMarshaler = anyContentMarshaler;
042        }
043    
044        public void addPolicy(HandlerRegistry registry) {
045            registry.addHandler(AddressingContext.MessageID_QNAME, new AttributedURIHandler() {
046                protected void setValue(AddressingContext context, AttributedURI value) {
047                    context.setMessageID(value);
048                }
049            });
050            registry.addHandler(AddressingContext.RelatesTo_QNAME, new RelationshipHandler() {
051                protected void setValue(AddressingContext context, Relationship value) {
052                    context.setRelatesTo(value);
053                }
054            });
055            registry.addHandler(AddressingContext.To_QNAME, new AttributedURIHandler() {
056                protected void setValue(AddressingContext context, AttributedURI value) {
057                    context.setTo(value);
058                }
059            });
060            registry.addHandler(AddressingContext.Action_QNAME, new AttributedURIHandler() {
061                protected void setValue(AddressingContext context, AttributedURI value) {
062                    context.setAction(value);
063                }
064            });
065            registry.addHandler(AddressingContext.From_QNAME, new EndpointReferenceTypeHandler(anyContentMarshaler) {
066                protected void setValue(AddressingContext context, EndpointReferenceType value) {
067                    context.setFrom(value);
068                }
069            });
070            registry.addHandler(AddressingContext.ReplyTo_QNAME, new EndpointReferenceTypeHandler(anyContentMarshaler) {
071                protected void setValue(AddressingContext context, EndpointReferenceType value) {
072                    context.setReplyTo(value);
073                }
074            });
075            registry.addHandler(AddressingContext.FaultTo_QNAME, new EndpointReferenceTypeHandler(anyContentMarshaler) {
076                protected void setValue(AddressingContext context, EndpointReferenceType value) {
077                    context.setFaultTo(value);
078                }
079            });
080            registry.addHandler(AddressingContext.Recipient_QNAME, new EndpointReferenceTypeHandler(anyContentMarshaler) {
081                protected void setValue(AddressingContext context, EndpointReferenceType value) {
082                    context.setRecipient(value);
083                }
084            });
085        }
086    
087        public void removePolicy(HandlerRegistry registry) {
088        }
089    }