Java tutorial
/** * 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 be.selckin.ws.util.java2php; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.cxf.endpoint.Endpoint; import org.apache.cxf.service.model.SchemaInfo; import org.apache.cxf.service.model.ServiceInfo; import org.apache.ws.commons.schema.utils.NamespacePrefixList; import javax.xml.namespace.QName; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class NameManager { private Map<String, String> nsPrefixMap; /** * @param service * @param endpoint * @return */ public static NameManager newNameManager(ServiceInfo service, Endpoint endpoint) { NameManager nameManager = new NameManager(); nameManager.initialize(service); return nameManager; } private void initialize(ServiceInfo service) { nsPrefixMap = new HashMap<String, String>(); Set<String> poorPrefixURIs = new HashSet<String>(); for (SchemaInfo schemaInfo : service.getSchemas()) { NamespacePrefixList schemaPrefixList = schemaInfo.getSchema().getNamespaceContext(); for (String declaredPrefix : schemaPrefixList.getDeclaredPrefixes()) { String uri = schemaPrefixList.getNamespaceURI(declaredPrefix); if (!nsPrefixMap.containsKey(uri)) { // first schema to define a prefix wins. if (declaredPrefix.startsWith("ns") || "tns".equals(declaredPrefix)) { poorPrefixURIs.add(uri); } else { nsPrefixMap.put(uri, declaredPrefix.toUpperCase()); } } } } for (String uri : poorPrefixURIs) { defineFallbackPrefix(uri); } } /** * Take a URI and turn it into a JavaScript name prefix. * * @param uri input URI. * @return output prefix. */ protected String transformURI(String uri) { return uri.replaceAll("http:/*", "").replace("uri:", "").replaceAll("[\\.:/-]", "\\\\"); } private String defineFallbackPrefix(String uri) { // this needs more work later. We are bound to annoy someone somehow in this area. String jsPrefix = transformURI(uri); nsPrefixMap.put(uri, jsPrefix); return jsPrefix; } public String getPhpNamespace(QName qname) { String nsprefix = nsPrefixMap.get(qname.getNamespaceURI()); // nsprefix will be null if there is no prefix. if (nsprefix == null) { nsprefix = defineFallbackPrefix(qname.getNamespaceURI()); } String[] separated = nsprefix.split("\\\\"); CollectionUtils.reverseArray(separated); return StringUtils.join(separated, "\\"); } public String getPhpClassName(QName qname) { return StringUtils.capitalize(qname.getLocalPart()); } public String getPhpName(QName qname) { return qname.getLocalPart(); } public String getAbsolutePhpClassName(QName qName) { return "\\" + getPhpNamespace(qName) + "\\" + getPhpClassName(qName); } }