/** {@inheritDoc} */ @Override public void createServiceImplementationFromWSDL( Role role, java.util.List<Role> refRoles, ProtocolModel behaviour, String wsdlPath, String wsdlLocation, java.util.List<String> refWsdlPaths, String srcFolder, ResourceLocator locator) throws Exception { super.createServiceImplementationFromWSDL( role, refRoles, behaviour, wsdlPath, wsdlLocation, refWsdlPaths, srcFolder, locator); // Process the service implementation class javax.wsdl.Definition defn = getWSDLReader().readWSDL(wsdlPath); if (defn != null) { // Use the namespace to obtain a Java package String pack = JavaGeneratorUtil.getJavaPackage(defn.getTargetNamespace()); String folder = pack.replace('.', java.io.File.separatorChar); @SuppressWarnings("unchecked") java.util.Iterator<PortType> portTypes = defn.getPortTypes().values().iterator(); while (portTypes.hasNext()) { PortType portType = portTypes.next(); java.io.File f = new java.io.File( srcFolder + java.io.File.separatorChar + folder + java.io.File.separatorChar + portType.getQName().getLocalPart() + "Impl.java"); if (f.exists()) { makeSwitchyardService(f, portType, srcFolder); addServiceReferencesToImplementation(f, role, refRoles, refWsdlPaths, srcFolder); addServiceBehaviour(f, role, refRoles, behaviour, srcFolder, locator); } else { logger.severe("Service file '" + f.getAbsolutePath() + "' does not exist"); } } removeWebServiceAndClientAnnotations(wsdlPath, srcFolder); } else { logger.severe("Failed to retrieve WSDL definition '" + wsdlPath + "'"); } }
public PortType getPortType(Definition wsdlDef) { // if(wsdlDef==null) wsdlDef = getService().getDefinition(); String ptName = getPortType(); Map portTypes = wsdlDef.getPortTypes(); for (Iterator iter = portTypes.values().iterator(); iter.hasNext(); ) { PortType pt = (PortType) iter.next(); if (pt.getQName().getLocalPart().equals(ptName)) { return pt; } } return null; }
public void testCompare() throws WSDLException, ComparisonException { Comparator<Definition> comparator = new WSDLDeclarationComparator(); Definition originalWSDL = WSDLTestUtils.getWSDLDefinition(); Definition changedWSDL = WSDLTestUtils.getWSDLDefinitionWithDetails(); // originalWSDL.setExtensionAttribute(); // originalWSDL.setTypes(); // originalWSDL.addBinding(); // originalWSDL.addImport(); // originalWSDL.addMessage(); // originalWSDL.addBinding(); // originalWSDL.addPortType(); // originalWSDL.addService(); // originalWSDL.addExtensibilityElement(); originalWSDL.getAllBindings(); originalWSDL.getAllPortTypes(); originalWSDL.getAllServices(); originalWSDL.getDocumentBaseURI(); originalWSDL.getImports(); originalWSDL.getMessages(); originalWSDL.getNamespaces(); originalWSDL.getPortTypes(); originalWSDL.getQName(); originalWSDL.getTargetNamespace(); originalWSDL.getTypes(); originalWSDL.getDocumentationElement(); originalWSDL.getExtensibilityElements(); // TODO Fix me originalWSDL.getExtensionAttributes(); Comparison defaultComparison = new DefaultComparison(); comparator.compare(originalWSDL, changedWSDL, defaultComparison); System.out.println(defaultComparison); assertNotNull(defaultComparison); }
public void createServiceComposite( Role role, java.util.List<Role> refRoles, String wsdlPath, java.util.List<String> refWsdlPaths, String resourceFolder, String srcFolder) throws Exception { javax.wsdl.Definition defn = getWSDLReader().readWSDL(wsdlPath); if (defn != null) { java.io.File wsdlFile = new java.io.File(wsdlPath); if (!wsdlFile.exists()) { java.net.URL url = ClassLoader.getSystemResource(wsdlPath); wsdlFile = new java.io.File(url.getFile()); if (!wsdlFile.exists()) { logger.severe("Failed to find WSDL file '" + wsdlPath + "'"); } } ResourceLocator locator = new DefaultResourceLocator(wsdlFile.getParentFile()); StringBuffer composite = new StringBuffer(); StringBuffer transformers = new StringBuffer(); StringBuffer component = new StringBuffer(); String targetNamespace = defn.getTargetNamespace(); String name = role.getName(); composite.append("<switchyard xmlns=\"urn:switchyard-config:switchyard:1.0\"\r\n"); // TODO: May need to add other namespaces here composite.append("\t\ttargetNamespace=\"" + targetNamespace + "\"\r\n"); composite.append("\t\tname=\"" + name + "\">\r\n"); composite.append( "\t<composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\"\r\n"); composite.append("\t\t\ttargetNamespace=\""); composite.append(targetNamespace); composite.append("\"\r\n\t\t\tname=\""); composite.append(name); composite.append("\" >\r\n"); @SuppressWarnings("unchecked") java.util.Iterator<PortType> portTypes = defn.getPortTypes().values().iterator(); while (portTypes.hasNext()) { PortType portType = portTypes.next(); // Define transformers addPortTypeTransformers(portType, true, transformers, defn, locator, srcFolder); String wsdlName = wsdlPath; int ind = wsdlName.lastIndexOf('/'); String wsdlLocation = wsdlName; if (ind != -1) { wsdlLocation = wsdlName.substring(ind + 1); wsdlName = wsdlName.substring(ind + 1) + "#wsdl.porttype(" + portType.getQName().getLocalPart() + ")"; } composite.append( "\t\t<service name=\"" + portType.getQName().getLocalPart() + "\" promote=\"" + portType.getQName().getLocalPart() + "Component/" + portType.getQName().getLocalPart() + "\">\r\n"); composite.append("\t\t\t<interface.wsdl interface=\"wsdl/" + wsdlName + "\" />\r\n"); composite.append( "\t\t\t<binding.soap xmlns=\"urn:switchyard-component-soap:config:1.0\">\r\n"); composite.append("\t\t\t\t<wsdl>wsdl/" + wsdlLocation + "</wsdl>\r\n"); composite.append("\t\t\t\t<socketAddr>:18001</socketAddr>\r\n"); composite.append("\t\t\t</binding.soap>\r\n"); composite.append("\t\t</service>\r\n"); String pack = JavaGeneratorUtil.getJavaPackage(defn.getTargetNamespace()); component.append( "\t\t<component name=\"" + portType.getQName().getLocalPart() + "Component\">\r\n"); component.append( "\t\t\t<implementation.bean xmlns=\"urn:switchyard-component-bean:config:1.0\" " + "class=\"" + pack + "." + portType.getQName().getLocalPart() + "Impl\"/>\r\n"); component.append( "\t\t\t<service name=\"" + portType.getQName().getLocalPart() + "\" >\r\n"); component.append( "\t\t\t\t<interface.java interface=\"" + pack + "." + portType.getQName().getLocalPart() + "\"/>\r\n"); component.append("\t\t\t</service>\r\n"); for (int i = 0; i < refWsdlPaths.size(); i++) { String refWsdlPath = refWsdlPaths.get(i); javax.wsdl.Definition refDefn = getWSDLReader().readWSDL(refWsdlPath); java.io.File refWsdlFile = new java.io.File(refWsdlPath); if (!refWsdlFile.exists()) { java.net.URL url = ClassLoader.getSystemResource(refWsdlPath); refWsdlFile = new java.io.File(url.getFile()); if (!refWsdlFile.exists()) { logger.severe("Failed to find ref WSDL file '" + refWsdlPath + "'"); } } ResourceLocator refLocator = new DefaultResourceLocator(refWsdlFile.getParentFile()); if (refDefn != null) { @SuppressWarnings("unchecked") java.util.Iterator<PortType> refPortTypes = refDefn.getPortTypes().values().iterator(); while (refPortTypes.hasNext()) { PortType refPortType = refPortTypes.next(); // Define transformers addPortTypeTransformers( refPortType, false, transformers, refDefn, refLocator, srcFolder); String refWsdlName = refWsdlPath; wsdlLocation = refWsdlName; ind = refWsdlName.lastIndexOf('/'); if (ind != -1) { wsdlLocation = refWsdlName.substring(ind + 1); refWsdlName = refWsdlName.substring(ind + 1) + "#wsdl.porttype(" + refPortType.getQName().getLocalPart() + ")"; } composite.append( "\t\t<reference name=\"" + refPortType.getQName().getLocalPart() + "\" promote=\"" + portType.getQName().getLocalPart() + "Component/" + refPortType.getQName().getLocalPart() + "\" multiplicity=\"1..1\" >\r\n"); composite.append( "\t\t\t<interface.wsdl interface=\"wsdl/" + refWsdlName + "\" />\r\n"); composite.append( "\t\t\t<binding.soap xmlns=\"urn:switchyard-component-soap:config:1.0\">\r\n"); composite.append("\t\t\t\t<wsdl>wsdl/" + wsdlLocation + "</wsdl>\r\n"); composite.append("\t\t\t\t<socketAddr>:18001</socketAddr>\r\n"); composite.append("\t\t\t</binding.soap>\r\n"); composite.append("\t\t</reference>\r\n"); String refPack = JavaGeneratorUtil.getJavaPackage(refDefn.getTargetNamespace()); component.append( "\t\t\t<reference name=\"" + refPortType.getQName().getLocalPart() + "\" >\r\n"); component.append( "\t\t\t\t<interface.java interface=\"" + refPack + "." + refPortType.getQName().getLocalPart() + "\"/>\r\n"); component.append("\t\t\t</reference>\r\n"); } } } component.append("\t\t</component>\r\n"); composite.append(component.toString()); } composite.append("\t</composite>\r\n"); if (transformers.length() > 0) { composite.append("\t<transforms xmlns:xform=\"urn:switchyard-config:transform:1.0\">\r\n"); composite.append(transformers.toString()); composite.append("\t</transforms>\r\n"); } composite.append("</switchyard>\r\n"); java.io.FileOutputStream fos = new java.io.FileOutputStream( resourceFolder + java.io.File.separatorChar + "switchyard.xml"); fos.write(composite.toString().getBytes()); fos.close(); } }
protected void addServiceReferencesToImplementation( java.io.File implFile, Role role, java.util.List<Role> refRoles, java.util.List<String> refWsdlPaths, String srcFolder) throws Exception { // Check that the number of reference roles and wsdl paths are the same if (refRoles.size() != refWsdlPaths.size()) { throw new IllegalArgumentException( "The number of reference roles and wsdl paths are not consistent"); } java.io.FileInputStream fis = new java.io.FileInputStream(implFile); byte[] b = new byte[fis.available()]; fis.read(b); StringBuffer text = new StringBuffer(); text.append(new String(b)); fis.close(); int index = text.indexOf("private static final Logger"); if (index != -1) { for (int i = 0; i < refRoles.size(); i++) { javax.wsdl.Definition refDefn = getWSDLReader().readWSDL(refWsdlPaths.get(i)); if (refDefn != null) { // Use the namespace to obtain a Java package String refPack = JavaGeneratorUtil.getJavaPackage(refDefn.getTargetNamespace()); @SuppressWarnings("unchecked") java.util.Iterator<PortType> refPortTypes = refDefn.getPortTypes().values().iterator(); int refPortCount = 1; while (refPortTypes.hasNext()) { PortType refPortType = refPortTypes.next(); String name = JavaBehaviourGenerator.getVariableName(refRoles.get(i).getName()); if (refDefn.getPortTypes().size() > 1) { name += refPortCount; } text.insert( index, "@javax.inject.Inject @org.switchyard.component.bean.Reference\r\n " + refPack + "." + refPortType.getQName().getLocalPart() + " _" + name + ";\r\n\r\n "); } } } java.io.FileOutputStream fos = new java.io.FileOutputStream(implFile); fos.write(text.toString().getBytes()); fos.close(); } else { logger.severe( "Service implementation file '" + implFile.getAbsolutePath() + "' does not have 'private static final Logger' as location to insert references"); } }