< prev index next >

jdk/test/javax/xml/ws/8172297/Main.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 21,82 **** * questions. */ /* * @test ! * @bug 8172297 * @summary Test that carriage-return and new-line characters * are preserved in webservice parameters * @compile ws/HelloWorld.java ws/HelloWorldImpl.java Main.java * @run testng/othervm Main */ import java.io.IOException; import java.net.ServerSocket; import java.net.URL; import java.util.concurrent.CountDownLatch; import javax.xml.namespace.QName; import javax.xml.ws.Endpoint; import javax.xml.ws.Service; import org.testng.Assert; import org.testng.annotations.Test; import ws.HelloWorld; import ws.HelloWorldImpl; public class Main { ! @Test ! public void runTest() throws Exception { ! // CountDownLatch serverInitSignal = new CountDownLatch(1); CountDownLatch testDoneSignal = new CountDownLatch(1); WebserviceRunner serverThread = new WebserviceRunner(serverInitSignal, testDoneSignal); (new Thread(serverThread)).start(); serverInitSignal.await(); ! boolean paramModified = runClientCode(serverThread.getPort()); testDoneSignal.countDown(); ! Assert.assertFalse(paramModified, "WS parameter was modified during round trip."); } /* * Connects to launched web service endpoint, sends message with CR/NL symbols and * checks if it was modified during the round trip client/server communication. */ ! private boolean runClientCode(int port) throws Exception { System.out.println("Launching WS client connection on " + port + " port"); URL url = new URL("http://localhost:" + port + "/ws/hello?wsdl"); QName qname = new QName("http://ws/", "HelloWorldImplService"); Service service = Service.create(url, qname); HelloWorld hello = (HelloWorld) service.getPort(HelloWorld.class); logStringContent("Client input parameter", WS_PARAM_VALUE); String response = hello.getHelloWorldAsString(WS_PARAM_VALUE); --- 21,97 ---- * questions. */ /* * @test ! * @bug 8172297 8196491 * @summary Test that carriage-return and new-line characters * are preserved in webservice parameters * @compile ws/HelloWorld.java ws/HelloWorldImpl.java Main.java * @run testng/othervm Main */ import java.io.IOException; import java.net.ServerSocket; import java.net.URL; + import java.util.Collections; + import java.util.Set; import java.util.concurrent.CountDownLatch; import javax.xml.namespace.QName; + import javax.xml.soap.SOAPMessage; import javax.xml.ws.Endpoint; import javax.xml.ws.Service; + import javax.xml.ws.handler.Handler; + import javax.xml.ws.handler.MessageContext; + import javax.xml.ws.handler.soap.SOAPHandler; + import javax.xml.ws.handler.soap.SOAPMessageContext; import org.testng.Assert; + import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import ws.HelloWorld; import ws.HelloWorldImpl; public class Main { ! @Test(dataProvider="callHandlerDataProvider") ! public void runTest(boolean callGetMessageInHandler) throws Exception { CountDownLatch serverInitSignal = new CountDownLatch(1); CountDownLatch testDoneSignal = new CountDownLatch(1); WebserviceRunner serverThread = new WebserviceRunner(serverInitSignal, testDoneSignal); (new Thread(serverThread)).start(); serverInitSignal.await(); ! boolean paramModified = runClientCode(serverThread.getPort(), callGetMessageInHandler); testDoneSignal.countDown(); ! Assert.assertEquals(callGetMessageInHandler, paramModified, ! "WS parameter has not been processed as expected"); ! } ! ! @DataProvider ! public Object[][] callHandlerDataProvider() { ! return new Object[][]{{true}, {false}}; } /* * Connects to launched web service endpoint, sends message with CR/NL symbols and * checks if it was modified during the round trip client/server communication. */ ! private boolean runClientCode(int port, boolean callGetMessage) throws Exception { System.out.println("Launching WS client connection on " + port + " port"); URL url = new URL("http://localhost:" + port + "/ws/hello?wsdl"); QName qname = new QName("http://ws/", "HelloWorldImplService"); Service service = Service.create(url, qname); + registerHandler(service, callGetMessage); + HelloWorld hello = (HelloWorld) service.getPort(HelloWorld.class); logStringContent("Client input parameter", WS_PARAM_VALUE); String response = hello.getHelloWorldAsString(WS_PARAM_VALUE);
*** 84,93 **** --- 99,147 ---- return !WS_PARAM_VALUE.equals(response); } /* + * Register message handler and call SOAPMessageContext.getMessage + * to emulate issue reported in JDK-8196491 + */ + private void registerHandler(Service service, final boolean callGetMessage) { + System.out.printf( "Client %s call getMessage inside message handler%n", + callGetMessage ? "will" : "will not" ); + // Set custom SOAP message handler resolver + service.setHandlerResolver(portInfo -> { + Handler h = new SOAPHandler<SOAPMessageContext>() { + + @Override + public boolean handleMessage(SOAPMessageContext context) { + if (callGetMessage) { + // Trigger exception from JDK-8196491 + SOAPMessage msg = context.getMessage(); + } + return true; + } + + @Override + public boolean handleFault(SOAPMessageContext context) { + return true; + } + + @Override + public void close(MessageContext context) { + } + + @Override + public Set<QName> getHeaders() { + return null; + } + + }; + return Collections.singletonList(h); + }); + } + + /* * Outputs the parameter value with newline and carriage-return symbols * replaced with #CR and #NL text abbreviations. */ private static void logStringContent(String description, String parameter) { String readableContent = parameter.replaceAll("\r", "#CR")
< prev index next >