1   /*
2    * Copyright  2004 The Apache Software Foundation.
3    *
4    *  Licensed under the Apache License, Version 2.0 (the "License");
5    *  you may not use this file except in compliance with the License.
6    *  You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
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 org.apache.ws.addressing.handler;
18  
19  import org.apache.axis.message.MessageElement;
20  import org.apache.axis.message.addressing.Action;
21  import org.apache.axis.message.addressing.Address;
22  import org.apache.axis.message.addressing.AddressingHeaders;
23  import org.apache.axis.message.addressing.Constants;
24  import org.apache.axis.message.addressing.From;
25  import org.apache.axis.message.addressing.Recipient;
26  import org.apache.axis.message.addressing.ReferencePropertiesType;
27  import org.apache.axis.message.addressing.RelatesTo;
28  import org.apache.axis.types.URI;
29  
30  import javax.xml.namespace.QName;
31  import javax.xml.rpc.handler.soap.SOAPMessageContext;
32  import javax.xml.rpc.JAXRPCException;
33  import java.util.Map;
34  
35  /***
36   * Test case for {@link ClientSideAddressingHandler}.
37   */
38  public class ClientSideAddressingHandlerTestCase extends AbstractAddressingHandlerTestCase {
39      ClientSideAddressingHandler m_handler;
40  
41      protected void setUp() throws Exception {
42          super.setUp();
43          m_handler = new ClientSideAddressingHandler();
44          Map handlerConfig = createHandlerConfig(ACTOR_NEXT, Boolean.FALSE.toString(), "*");
45          m_handler.init(createHandlerInfo(ClientSideAddressingHandler.class, handlerConfig));
46      }
47  
48      protected AbstractAddressingHandler getHandler() {
49          return m_handler;
50      }    
51  
52      /***
53       * Test for {@link ClientSideAddressingHandler#handleRequest(javax.xml.rpc.handler.MessageContext)}.
54       *
55       * @throws Exception on error
56       */
57      public void testHandleRequest() throws Throwable {
58          SOAPMessageContext msgContext = createSOAPMessageContext();
59          msgContext.setMessage(createMessage("org/apache/ws/addressing/handler/testRequest.xml"));
60          m_handler.setSOAPAction(msgContext, "http://foo.com/mail#Put");
61          try {
62              assertTrue("handleRequest() should always return true", m_handler.handleRequest(msgContext));
63          }
64          catch (JAXRPCException jaxrpce) {
65              throw jaxrpce.getLinkedCause();
66          }
67          Object prop = msgContext.getProperty(Constants.ENV_ADDRESSING_REQUEST_HEADERS);
68          assertNotNull(prop);
69          assertTrue(prop instanceof AddressingHeaders);
70          AddressingHeaders addrHeaders = (AddressingHeaders) prop;
71          assertFalse(addrHeaders.isSetMustUnderstand());
72          checkMessageIdHeader(addrHeaders, null);
73          checkRelatesToHeader(addrHeaders, new RelatesTo[0]);
74          checkReplyToHeader(addrHeaders, null);
75          checkFaultToHeader(addrHeaders, null);
76          checkToHeader(addrHeaders, null);
77          checkFromHeader(addrHeaders, new From(new Address(Constants.NS_URI_ANONYMOUS)));
78          checkRecipientHeader(addrHeaders, new Recipient(new Address("http://blah.com:8080/axis/services/tester")));
79          checkActionHeader(addrHeaders, new Action(new URI("http://foo.com/mail#Put")));
80          checkReferenceProperties(addrHeaders, new ReferencePropertiesType());
81      }
82  
83      /***
84       * Test for {@link ClientSideAddressingHandler#handleResponse(javax.xml.rpc.handler.MessageContext)}.
85       *
86       * @throws Exception on error
87       */
88      public void testHandleResponse() throws Exception {
89          SOAPMessageContext msgContext = createSOAPMessageContext();
90          msgContext.setMessage(createMessage("org/apache/ws/addressing/handler/testRequest.xml"));
91          m_handler.setSOAPAction(msgContext, "http://foo.com/mail#Put");
92          m_handler.handleRequest(msgContext);
93          // don't set response message on context - we want to reuse the request message
94          assertTrue("handleResponse() should always return true", m_handler.handleResponse(msgContext));
95          Object prop = msgContext.getProperty(Constants.ENV_ADDRESSING_RESPONSE_HEADERS);
96          assertNotNull(prop);
97          assertTrue(prop instanceof AddressingHeaders);
98          AddressingHeaders addrHeaders = (AddressingHeaders) prop;
99          assertFalse(addrHeaders.isSetMustUnderstand());
100         checkMessageIdHeader(addrHeaders, null);
101         checkRelatesToHeader(addrHeaders, new RelatesTo[0]);
102         checkReplyToHeader(addrHeaders, null);
103         checkFaultToHeader(addrHeaders, null);
104         checkToHeader(addrHeaders, null);
105         checkFromHeader(addrHeaders, new From(new Address(Constants.NS_URI_ANONYMOUS)));
106         checkRecipientHeader(addrHeaders, null);
107         checkActionHeader(addrHeaders, new Action(new URI("http://foo.com/mail#Put")));
108         ReferencePropertiesType expectedRefPropsType = new ReferencePropertiesType();
109         expectedRefPropsType.set_any(new MessageElement[]{new MessageElement(new QName("http://www/hp/com/", "ResourceID"), "1234")});
110         checkReferenceProperties(addrHeaders, expectedRefPropsType);
111     }
112 
113     /***
114      * Test for {@link ClientSideAddressingHandler#handleFault(javax.xml.rpc.handler.MessageContext)}.
115      *
116      * @throws Exception on error
117      */
118     public void testHandleFault() throws Exception {
119         SOAPMessageContext msgContext = createSOAPMessageContext();
120         msgContext.setMessage( createMessage( "org/apache/ws/addressing/handler/testRequest.xml" ) );
121         m_handler.setSOAPAction( msgContext, "http://foo.com/mail#Put" );
122         assertTrue( "handleFault() should always return true", m_handler.handleFault( msgContext ) );
123     }
124 
125 }