Repository: tomee
Updated Branches:
  refs/heads/master d57b2a910 -> 31a308994


TOMEE-1942 test for org.apache.cxf.stax.maxChildElements


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/31a30899
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/31a30899
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/31a30899

Branch: refs/heads/master
Commit: 31a3089944cccf961c666215958352049c009ff4
Parents: d57b2a9
Author: rmannibucau <rmannibu...@apache.org>
Authored: Fri Sep 23 08:29:41 2016 +0200
Committer: rmannibucau <rmannibu...@apache.org>
Committed: Fri Sep 23 08:29:41 2016 +0200

----------------------------------------------------------------------
 .../apache/openejb/server/cxf/MaxChildTest.java | 141 +++++++++++++++++++
 1 file changed, 141 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/31a30899/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/MaxChildTest.java
----------------------------------------------------------------------
diff --git 
a/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/MaxChildTest.java
 
b/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/MaxChildTest.java
new file mode 100644
index 0000000..d727cf3
--- /dev/null
+++ 
b/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/MaxChildTest.java
@@ -0,0 +1,141 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.server.cxf;
+
+import org.apache.openejb.config.AppModule;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.config.WebModule;
+import org.apache.openejb.config.sys.Service;
+import org.apache.openejb.jee.Application;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.WebApp;
+import org.apache.openejb.jee.oejb3.OpenejbJar;
+import org.apache.openejb.jee.oejb3.PojoDeployment;
+import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.EnableServices;
+import org.apache.openejb.testing.Module;
+import org.apache.openejb.testing.RandomPort;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.jws.WebService;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.namespace.QName;
+import javax.xml.ws.soap.SOAPFaultException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Properties;
+
+import static javax.xml.bind.annotation.XmlAccessType.FIELD;
+import static org.junit.Assert.assertEquals;
+
+@EnableServices("jaxws")
+@RunWith(ApplicationComposer.class)
+public class MaxChildTest {
+    @RandomPort("http")
+    private URL root;
+
+    @Test
+    public void passing() throws MalformedURLException {
+        assertEquals(0,
+                javax.xml.ws.Service.create(new URL(root.toExternalForm() + 
"app/ws?wsdl"), new QName("http://cxf.server.openejb.apache.org/";, 
"SimpleContractImplService"))
+                        .getPort(SimpleContract.class)
+                        .test(new Root())
+                        .getChildren().size());
+    }
+
+    @Test
+    public void tooBig() throws MalformedURLException {
+        try {
+            final Root root = new Root();
+            for (int i = 0; i < 2; i++) {
+                root.getChildren().add(new Child());
+            }
+            javax.xml.ws.Service.create(new URL(this.root.toExternalForm() + 
"app/ws?wsdl"), new QName("http://cxf.server.openejb.apache.org/";, 
"SimpleContractImplService"))
+                    .getPort(SimpleContract.class)
+                    .test(root);
+        } catch (final SOAPFaultException e) {
+            assertEquals("Unmarshalling Error: Maximum Number of Child 
Elements limit (1) Exceeded ", e.getMessage());
+        }
+    }
+
+    @Module
+    public AppModule app() {
+        final String jarLocation = "target/" + getClass().getSimpleName();
+        return new AppModule(Thread.currentThread().getContextClassLoader(), 
jarLocation, new Application(), true) {{
+            getEjbModules().add(new EjbModule(new EjbJar("app"), new 
OpenejbJar() {{
+                getPojoDeployment().add(new PojoDeployment() {{
+                    setClassName(SimpleContractImpl.class.getName());
+                    getProperties().setProperty("cxf.jaxws.properties", 
"cxfLargeMsgSize");
+                }});
+            }}));
+            getWebModules().add(new WebModule(
+                    new WebApp().contextRoot("app").addServlet("ws", 
SimpleContractImpl.class.getName(), "/ws"),
+                    "app",
+                    Thread.currentThread().getContextClassLoader(),
+                    jarLocation, "app"
+            ));
+            getServices().add(new Service() {{
+                setId("cxfLargeMsgSize");
+                setClassName(Properties.class.getName());
+                
getProperties().setProperty("org.apache.cxf.stax.maxChildElements", "1");
+            }});
+        }};
+    }
+
+    @WebService
+    public interface SimpleContract {
+        Root test(Root root);
+    }
+
+    @WebService
+    public static class SimpleContractImpl implements SimpleContract {
+        @Override
+        public Root test(final Root root) {
+            return root;
+        }
+    }
+
+    @XmlRootElement
+    @XmlAccessorType(FIELD)
+    public static class Root {
+        @XmlElement
+        private Collection<Child> children;
+
+        public Collection<Child> getChildren() {
+            return children == null ? (children = new ArrayList<>()) : 
children;
+        }
+    }
+
+    @XmlAccessorType(FIELD)
+    public static class Child {
+        @XmlElement
+        private String name;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(final String name) {
+            this.name = name;
+        }
+    }
+}

Reply via email to