/** * 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 * * http://www.apache.org/licenses/LICENSE-2.0 * * 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.cxf.jaxb; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import org.apache.cxf.common.jaxb.JAXBUtils; import org.apache.cxf.common.util.ReflectionUtil; import org.apache.hello_world_soap_http.types.GreetMe; import org.junit.Assert; import org.junit.Test; public class JAXBUtilsTest extends Assert { @Test public void testBuiltInTypeToJavaType() { assertEquals("boolean", JAXBUtils.builtInTypeToJavaType("boolean")); assertEquals("javax.xml.datatype.XMLGregorianCalendar", JAXBUtils.builtInTypeToJavaType("gYear")); assertNull(JAXBUtils.builtInTypeToJavaType("other")); } @Test public void testPackageNames() { assertEquals("org.apache.cxf.configuration.types", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/configuration/types")); // tests of JAXB 2.2 Appendix D.5.1, Rule #1: schemes to be removed are just http and urn assertEquals("auto.org.apache.cxf.configuration.types", JAXBUtils.namespaceURIToPackage("auto://cxf.apache.org/configuration/types")); assertEquals("mouse.org.apache.cxf.configuration.types", JAXBUtils.namespaceURIToPackage("mouse://cxf.apache.org/configuration/types")); assertEquals("h.org.apache.cxf.configuration.types", JAXBUtils.namespaceURIToPackage("h://cxf.apache.org/configuration/types")); // tests of JAXB 2.2 Appendix D.5.1, Rule #2: file type is one of .?? or .??? or .html assertEquals("org.apache.cxf.configuration.types_h", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/configuration/types.h")); assertEquals("org.apache.cxf.configuration.types", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/configuration/types.hi")); assertEquals("org.apache.cxf.configuration.types", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/configuration/types.xsd")); assertEquals("org.apache.cxf.configuration.types", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/configuration/types.html")); assertEquals("org.apache.cxf.configuration.types_auto", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/configuration/types.auto")); assertEquals("org.apache.cxf.configuration.types_mouse", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/configuration/types.mouse")); // other tests assertEquals("https.com.mytech.rosette_analysis", JAXBUtils.namespaceURIToPackage("https://mytech.com/rosette.analysis")); assertEquals("org.apache.cxf.config._4types_", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/config/4types.")); assertEquals("org.apache.cxf.config_types", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/config-types")); assertEquals("org.apache.cxf._default.types", JAXBUtils.namespaceURIToPackage("http://cxf.apache.org/default/types")); assertEquals("com.progress.configuration.types", JAXBUtils.namespaceURIToPackage("http://www.progress.com/configuration/types")); assertEquals("org.apache.cxf.config.types", JAXBUtils.namespaceURIToPackage("urn:cxf-apache-org:config:types")); assertEquals("types", JAXBUtils.namespaceURIToPackage("types")); } @Test public void testNameToIdentifier() { assertEquals("_return", JAXBUtils.nameToIdentifier("return", JAXBUtils.IdentifierType.VARIABLE)); assertEquals("getReturn", JAXBUtils.nameToIdentifier("return", JAXBUtils.IdentifierType.GETTER)); assertEquals("setReturn", JAXBUtils.nameToIdentifier("return", JAXBUtils.IdentifierType.SETTER)); assertEquals("_public", JAXBUtils.nameToIdentifier("public", JAXBUtils.IdentifierType.VARIABLE)); assertEquals("getPublic", JAXBUtils.nameToIdentifier("public", JAXBUtils.IdentifierType.GETTER)); assertEquals("setPublic", JAXBUtils.nameToIdentifier("public", JAXBUtils.IdentifierType.SETTER)); assertEquals("arg0", JAXBUtils.nameToIdentifier("arg0", JAXBUtils.IdentifierType.VARIABLE)); assertEquals("getArg0", JAXBUtils.nameToIdentifier("arg0", JAXBUtils.IdentifierType.GETTER)); assertEquals("setArg0", JAXBUtils.nameToIdentifier("arg0", JAXBUtils.IdentifierType.SETTER)); assertEquals("mixedCaseName", JAXBUtils.nameToIdentifier("mixedCaseName", JAXBUtils.IdentifierType.VARIABLE)); assertEquals("MixedCaseName", JAXBUtils.nameToIdentifier("mixedCaseName", JAXBUtils.IdentifierType.CLASS)); assertEquals("setMixedCaseName", JAXBUtils.nameToIdentifier("mixedCaseName", JAXBUtils.IdentifierType.SETTER)); assertEquals("MIXED_CASE_NAME", JAXBUtils.nameToIdentifier("mixedCaseName", JAXBUtils.IdentifierType.CONSTANT)); assertEquals("answer42", JAXBUtils.nameToIdentifier("Answer42", JAXBUtils.IdentifierType.VARIABLE)); assertEquals("Answer42", JAXBUtils.nameToIdentifier("Answer42", JAXBUtils.IdentifierType.CLASS)); assertEquals("getAnswer42", JAXBUtils.nameToIdentifier("Answer42", JAXBUtils.IdentifierType.GETTER)); assertEquals("ANSWER_42", JAXBUtils.nameToIdentifier("Answer42", JAXBUtils.IdentifierType.CONSTANT)); assertEquals("nameWithDashes", JAXBUtils.nameToIdentifier("name-with-dashes", JAXBUtils.IdentifierType.VARIABLE)); assertEquals("NameWithDashes", JAXBUtils.nameToIdentifier("name-with-dashes", JAXBUtils.IdentifierType.CLASS)); assertEquals("setNameWithDashes", JAXBUtils.nameToIdentifier("name-with-dashes", JAXBUtils.IdentifierType.SETTER)); assertEquals("NAME_WITH_DASHES", JAXBUtils.nameToIdentifier("name-with-dashes", JAXBUtils.IdentifierType.CONSTANT)); assertEquals("otherPunctChars", JAXBUtils.nameToIdentifier("other_punct-chars", JAXBUtils.IdentifierType.VARIABLE)); assertEquals("OtherPunctChars", JAXBUtils.nameToIdentifier("other_punct-chars", JAXBUtils.IdentifierType.CLASS)); assertEquals("getOtherPunctChars", JAXBUtils.nameToIdentifier("other_punct-chars", JAXBUtils.IdentifierType.GETTER)); assertEquals("OTHER_PUNCT_CHARS", JAXBUtils.nameToIdentifier("other_punct-chars", JAXBUtils.IdentifierType.CONSTANT)); } @Test public void testNsToPkg() { String urn = "urn:cxf.apache.org"; String pkg = JAXBUtils.namespaceURIToPackage(urn); assertEquals("org.apache.cxf", pkg); urn = "urn:cxf.apache.org:test.v4.6.4"; pkg = JAXBUtils.namespaceURIToPackage(urn); assertEquals("org.apache.cxf.test_v4_6_4", pkg); } @Test public void testSetNamespaceMapper() throws Exception { JAXBContext ctx = JAXBContext.newInstance(GreetMe.class); Marshaller marshaller = ctx.createMarshaller(); Map<String, String> nspref = new HashMap<>(); nspref.put("http://cxf.apache.org/hello_world_soap_http/types", "x"); JAXBUtils.setNamespaceMapper(nspref, marshaller); String mapperkey = null; if (marshaller.getClass().getName().contains(".internal.")) { mapperkey = "com.sun.xml.internal.bind.namespacePrefixMapper"; } else if (marshaller.getClass().getName().contains("com.sun")) { mapperkey = "com.sun.xml.bind.namespacePrefixMapper"; } else if (marshaller.getClass().getName().contains("eclipse")) { mapperkey = "eclipselink.namespace-prefix-mapper"; } if (mapperkey != null) { Object mapper = marshaller.getProperty(mapperkey); assertNotNull(mapper); // also verify this mapper has setContextualNamespaceDecls Method m = ReflectionUtil.getDeclaredMethod(mapper.getClass(), "setContextualNamespaceDecls", new Class<?>[]{String[].class}); assertNotNull(m); } } }