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.FaultTo;
25  import org.apache.axis.message.addressing.From;
26  import org.apache.axis.message.addressing.PortType;
27  import org.apache.axis.message.addressing.Recipient;
28  import org.apache.axis.message.addressing.ReferencePropertiesType;
29  import org.apache.axis.message.addressing.RelatesTo;
30  import org.apache.axis.message.addressing.ReplyTo;
31  import org.apache.axis.message.addressing.ServiceNameType;
32  import org.apache.axis.message.addressing.To;
33  import org.apache.axis.types.URI;
34  
35  import javax.xml.namespace.QName;
36  import javax.xml.rpc.handler.soap.SOAPMessageContext;
37  import java.util.Map;
38  
39  /***
40   * Test case for {@link ServerSideAddressingHandler}.
41   */
42  public class ServerSideAddressingHandlerTestCase extends AbstractAddressingHandlerTestCase {
43  
44      ServerSideAddressingHandler m_handler;
45  
46      protected void setUp() throws Exception {
47          m_handler = new ServerSideAddressingHandler();
48          Map handlerConfig = createHandlerConfig(ACTOR_NEXT, Boolean.FALSE.toString(), "*");
49          m_handler.init(createHandlerInfo(ServerSideAddressingHandler.class,handlerConfig));
50      }
51  
52      protected AbstractAddressingHandler getHandler() {
53          return m_handler;
54      }
55     
56      /***
57       * Test for {@link ServerSideAddressingHandler#handleRequest(javax.xml.rpc.handler.MessageContext)}.
58       *
59       * @throws Exception on error
60       */
61      public void testHandleRequest() throws Exception {
62          SOAPMessageContext msgContext = createSOAPMessageContext();
63          msgContext.setMessage(createMessage("org/apache/ws/addressing/handler/testRequest.xml"));
64          assertTrue("handleRequest() should always return true", m_handler.handleRequest(msgContext));
65          Object prop = msgContext.getProperty(Constants.ENV_ADDRESSING_REQUEST_HEADERS);
66          assertNotNull(prop);
67          assertTrue(prop instanceof AddressingHeaders);
68          AddressingHeaders addrHeaders = (AddressingHeaders) prop;
69          assertFalse(addrHeaders.isSetMustUnderstand());
70          checkMessageIdHeader(addrHeaders, "aaaabbbb-cccc-dddd-eeee-ffffffffffff");
71          checkRelatesToHeader(addrHeaders, new RelatesTo[]{new RelatesTo("uuid:11112222-3333-4444-5555-666666666666", "{urn:testNS}testPart"),
72                                                            new RelatesTo("uuid:11112222-3333-4444-5555-999999999999", Constants.QNAME_RESPONSE.toString())});
73          ReplyTo expectedReplyTo = new ReplyTo(new Address(Constants.NS_URI_ANONYMOUS));
74          expectedReplyTo.setPortType(new PortType("urn:Foo", "Test"));
75          expectedReplyTo.setServiceName(new ServiceNameType("urn:Bar", "Test2"));
76          checkReplyToHeader(addrHeaders, expectedReplyTo);
77          checkFaultToHeader(addrHeaders, new FaultTo(new Address("http://business456.com/deadletters")));
78          checkToHeader(addrHeaders, new To("mailto:joe@fabrikam123.com"));
79          checkFromHeader(addrHeaders, new From(new Address("http://business456.com/client1")));
80          checkRecipientHeader(addrHeaders, new Recipient(new Address("http://blah.com:8080/axis/services/tester")));
81          checkActionHeader(addrHeaders, new Action(new URI("http://foo.com/mail#Get")));
82          ReferencePropertiesType expectedRefPropsType = new ReferencePropertiesType();
83          expectedRefPropsType.set_any(new MessageElement[]{new MessageElement(new QName("http://www/hp/com/", "ResourceID"), "1234")});
84          checkReferenceProperties(addrHeaders, expectedRefPropsType);
85      }
86  
87      /***
88       * Test for {@link ServerSideAddressingHandler#handleResponse(javax.xml.rpc.handler.MessageContext)}.
89       *
90       * @throws Exception on error
91       */
92      public void testHandleResponse() throws Exception {
93          SOAPMessageContext msgContext = createSOAPMessageContext();
94          msgContext.setMessage(createMessage("org/apache/ws/addressing/handler/testRequest.xml"));
95          m_handler.handleRequest(msgContext);
96          msgContext.setMessage(createMessage("org/apache/ws/addressing/handler/testResponse.xml"));
97          assertTrue("handleResponse() should always return true", m_handler.handleResponse(msgContext));
98          Object prop = msgContext.getProperty(Constants.ENV_ADDRESSING_RESPONSE_HEADERS);
99          assertNotNull(prop);
100         assertTrue(prop instanceof AddressingHeaders);
101         AddressingHeaders addrHeaders = (AddressingHeaders) prop;
102         assertFalse(addrHeaders.isSetMustUnderstand());
103         checkMessageIdHeader(addrHeaders, null);
104         checkRelatesToHeader(addrHeaders, new RelatesTo[]{new RelatesTo("uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff", Constants.QNAME_RESPONSE.toString())});
105         checkReplyToHeader(addrHeaders, null);
106         checkFaultToHeader(addrHeaders, null);
107         checkToHeader(addrHeaders, new To(Constants.NS_URI_ANONYMOUS));
108         checkFromHeader(addrHeaders, new From(new Address("mailto:joe@fabrikam123.com")));
109         checkRecipientHeader(addrHeaders, null);
110         checkActionHeader(addrHeaders, new Action(new URI("http://foo.com/mail#GetResponse")));
111         checkReferenceProperties(addrHeaders, new ReferencePropertiesType());
112     }
113 
114     /***
115      * Test for {@link ServerSideAddressingHandler#handleFault(javax.xml.rpc.handler.MessageContext)}.
116      *
117      * @throws Exception on error
118      */
119     public void testHandleFault() throws Exception {
120         // TODO
121         System.err.println("WARN: testHandleFault() not implemented.");
122     }
123 
124 }