001: /**
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */package org.apache.cxf.systest.ws.policy;
019:
020: import java.util.logging.Logger;
021:
022: import javax.xml.ws.Endpoint;
023:
024: import org.apache.cxf.Bus;
025: import org.apache.cxf.BusFactory;
026: import org.apache.cxf.bus.spring.SpringBusFactory;
027: import org.apache.cxf.greeter_control.Greeter;
028: import org.apache.cxf.greeter_control.PingMeFault;
029: import org.apache.cxf.greeter_control.ReliableGreeterService;
030: import org.apache.cxf.interceptor.LoggingInInterceptor;
031: import org.apache.cxf.interceptor.LoggingOutInterceptor;
032: import org.apache.cxf.systest.ws.util.ConnectionHelper;
033: import org.apache.cxf.systest.ws.util.InMessageRecorder;
034: import org.apache.cxf.systest.ws.util.MessageFlow;
035: import org.apache.cxf.systest.ws.util.MessageRecorder;
036: import org.apache.cxf.systest.ws.util.OutMessageRecorder;
037: import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
038: import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
039: import org.apache.cxf.ws.addressing.Names;
040: import org.apache.cxf.ws.rm.RMConstants;
041:
042: import org.junit.BeforeClass;
043: import org.junit.Test;
044:
045: /**
046: * Tests the use of the WS-Policy Framework to automatically engage WS-RM
047: * in response to Policies defined for the endpoint via an direct attachment to the wsdl.
048: */
049: public class RMPolicyWsdlTest extends AbstractBusClientServerTestBase {
050:
051: private static final Logger LOG = Logger
052: .getLogger(RMPolicyWsdlTest.class.getName());
053: private static final String GREETMEONEWAY_ACTION = null;
054: private static final String GREETME_ACTION = null;
055: private static final String GREETME_RESPONSE_ACTION = null;
056: private static final String PINGME_ACTION = null;
057: private static final String PINGME_RESPONSE_ACTION = Names.WSA_DEFAULT_FAULT_ACTION;
058:
059: public static class Server extends AbstractBusTestServerBase {
060:
061: protected void run() {
062: SpringBusFactory bf = new SpringBusFactory();
063: Bus bus = bf
064: .createBus("org/apache/cxf/systest/ws/policy/rmwsdl.xml");
065: BusFactory.setDefaultBus(bus);
066: LoggingInInterceptor in = new LoggingInInterceptor();
067: bus.getInInterceptors().add(in);
068: LoggingOutInterceptor out = new LoggingOutInterceptor();
069: bus.getOutInterceptors().add(out);
070: bus.getOutFaultInterceptors().add(out);
071:
072: ReliableGreeterImpl implementor = new ReliableGreeterImpl();
073: String address = "http://localhost:9020/SoapContext/GreeterPort";
074: Endpoint.publish(address, implementor);
075: LOG.info("Published greeter endpoint.");
076: }
077:
078: public static void main(String[] args) {
079: try {
080: Server s = new Server();
081: s.start();
082: } catch (Exception ex) {
083: ex.printStackTrace();
084: System.exit(-1);
085: } finally {
086: System.out.println("done!");
087: }
088: }
089: }
090:
091: @BeforeClass
092: public static void startServers() throws Exception {
093: assertTrue("server did not launch correctly",
094: launchServer(Server.class));
095: }
096:
097: @Test
098: public void testUsingRM() throws Exception {
099: SpringBusFactory bf = new SpringBusFactory();
100: bus = bf
101: .createBus("org/apache/cxf/systest/ws/policy/rmwsdl.xml");
102: BusFactory.setDefaultBus(bus);
103: OutMessageRecorder outRecorder = new OutMessageRecorder();
104: bus.getOutInterceptors().add(outRecorder);
105: InMessageRecorder inRecorder = new InMessageRecorder();
106: bus.getInInterceptors().add(inRecorder);
107:
108: ReliableGreeterService gs = new ReliableGreeterService();
109: final Greeter greeter = gs.getGreeterPort();
110: LOG.fine("Created greeter client.");
111:
112: ConnectionHelper.setKeepAliveConnection(greeter, true);
113:
114: // oneway
115:
116: greeter.greetMeOneWay("CXF");
117:
118: // two-way
119:
120: assertEquals("CXF", greeter.greetMe("cxf"));
121:
122: // exception
123:
124: try {
125: greeter.pingMe();
126: } catch (PingMeFault ex) {
127: fail("First invocation should have succeeded.");
128: }
129:
130: try {
131: greeter.pingMe();
132: fail("Expected PingMeFault not thrown.");
133: } catch (PingMeFault ex) {
134: assertEquals(2, (int) ex.getFaultInfo().getMajor());
135: assertEquals(1, (int) ex.getFaultInfo().getMinor());
136: }
137:
138: MessageRecorder mr = new MessageRecorder(outRecorder,
139: inRecorder);
140: mr.awaitMessages(5, 9, 5000);
141:
142: MessageFlow mf = new MessageFlow(outRecorder
143: .getOutboundMessages(), inRecorder.getInboundMessages());
144:
145: mf.verifyMessages(5, true);
146: String[] expectedActions = new String[] {
147: RMConstants.getCreateSequenceAction(),
148: GREETMEONEWAY_ACTION, GREETME_ACTION, PINGME_ACTION,
149: PINGME_ACTION };
150: mf.verifyActions(expectedActions, true);
151: mf.verifyMessageNumbers(
152: new String[] { null, "1", "2", "3", "4" }, true);
153: mf.verifyLastMessage(new boolean[] { false, false, false,
154: false, false }, true);
155: mf.verifyAcknowledgements(new boolean[] { false, false, false,
156: true, true }, true);
157:
158: mf.verifyMessages(9, false);
159: mf.verifyPartialResponses(5);
160: mf.purgePartialResponses();
161:
162: expectedActions = new String[] {
163: RMConstants.getCreateSequenceResponseAction(),
164: GREETME_RESPONSE_ACTION, GREETME_RESPONSE_ACTION,
165: PINGME_RESPONSE_ACTION };
166: mf.verifyActions(expectedActions, false);
167: mf.verifyMessageNumbers(new String[] { null, "1", "2", "3" },
168: false);
169: mf.verifyLastMessage(
170: new boolean[] { false, false, false, false }, false);
171: mf.verifyAcknowledgements(new boolean[] { false, true, true,
172: true }, false);
173:
174: }
175: }
|