/** * Clear the actual service Endpoint and use Gateway Endpoint instead of the actual Endpoint. * * @param definition - {@link Definition} - WSDL4j wsdl definition * @throws APIManagementException */ private void setServiceDefinition(Definition definition) throws APIManagementException { Map serviceMap = definition.getAllServices(); Iterator serviceItr = serviceMap.entrySet().iterator(); URL addressURI = null; try { while (serviceItr.hasNext()) { Map.Entry svcEntry = (Map.Entry) serviceItr.next(); Service svc = (Service) svcEntry.getValue(); Map portMap = svc.getPorts(); Iterator portItr = portMap.entrySet().iterator(); while (portItr.hasNext()) { Map.Entry portEntry = (Map.Entry) portItr.next(); Port port = (Port) portEntry.getValue(); List<ExtensibilityElement> extensibilityElementList = port.getExtensibilityElements(); for (int i = 0; i < extensibilityElementList.size(); i++) { ExtensibilityElement extensibilityElement = (ExtensibilityElement) port.getExtensibilityElements().get(i); addressURI = new URL(getAddressUrl(extensibilityElement)); if (addressURI == null) { break; } else { setAddressUrl(extensibilityElement); } } } } } catch (Exception e) { log.error("Error occured while getting the wsdl address location", e); throw new APIManagementException(e); } }
public static String getEndpointURL( Definition wsdlDefinition, String serviceName, String portName, String bindingName, String opName) { Map<?, ?> services = wsdlDefinition.getServices(); Set<?> serviceKeys = services.keySet(); for (Iterator<?> it = serviceKeys.iterator(); it.hasNext(); ) { QName serviceKey = (QName) it.next(); if (serviceName != null && serviceKey.getLocalPart().contentEquals(serviceName)) { Service service = (Service) services.get(serviceKey); Map<?, ?> ports = service.getPorts(); Set<?> portKeys = ports.keySet(); for (Iterator<?> it2 = portKeys.iterator(); it2.hasNext(); ) { String portKey = (String) it2.next(); if (portName != null && portKey.contentEquals(portName)) { Port port = (Port) ports.get(portKey); List<?> elements = port.getExtensibilityElements(); for (Iterator<?> it3 = elements.iterator(); it3.hasNext(); ) { Object element = it3.next(); if (element instanceof SOAPAddress) { SOAPAddress address = (SOAPAddress) element; return address.getLocationURI(); } else if (element instanceof SOAP12Address) { SOAP12Address address = (SOAP12Address) element; return address.getLocationURI(); } } } } } } return null; }
public static String[] getNSServiceNameAndMessageNameArray( Definition wsdlDefinition, String serviceName, String portName, String bindingName, String opName) { Map<?, ?> services = wsdlDefinition.getServices(); Set<?> serviceKeys = services.keySet(); for (Iterator<?> it = serviceKeys.iterator(); it.hasNext(); ) { QName serviceKey = (QName) it.next(); if (serviceName != null && serviceKey.getLocalPart().contentEquals(serviceName)) { Service service = (Service) services.get(serviceKey); Map<?, ?> ports = service.getPorts(); Set<?> portKeys = ports.keySet(); for (Iterator<?> it2 = portKeys.iterator(); it2.hasNext(); ) { String portKey = (String) it2.next(); if (portName != null && portKey.contentEquals(portName)) { Port port = (Port) ports.get(portKey); Binding wsdlBinding = port.getBinding(); PortType portType = wsdlBinding.getPortType(); String ns = portType.getQName().getNamespaceURI(); List<?> operations = portType.getOperations(); for (Iterator<?> it3 = operations.iterator(); it3.hasNext(); ) { Operation operation = (Operation) it3.next(); if (opName != null && operation.getName().contentEquals(opName)) { return new String[] {ns, serviceName, portName}; } } } } } } return null; }
public static boolean isSOAP12(Definition wsdlDefinition, String serviceName, String portName) { Map<?, ?> services = wsdlDefinition.getServices(); Set<?> serviceKeys = services.keySet(); for (Iterator<?> it = serviceKeys.iterator(); it.hasNext(); ) { QName serviceKey = (QName) it.next(); if (serviceName != null && serviceKey.getLocalPart().contentEquals(serviceName)) { Service service = (Service) services.get(serviceKey); Map<?, ?> ports = service.getPorts(); Set<?> portKeys = ports.keySet(); for (Iterator<?> it2 = portKeys.iterator(); it2.hasNext(); ) { String portKey = (String) it2.next(); if (portName != null && portKey.contentEquals(portName)) { Port port = (Port) ports.get(portKey); List<?> extElements = port.getExtensibilityElements(); for (Iterator<?> it3 = extElements.iterator(); it3.hasNext(); ) { ExtensibilityElement element = (ExtensibilityElement) it3.next(); String nsURI = element.getElementType().getNamespaceURI(); if (nsURI.contentEquals(SOAP12_NS_URI)) { return true; } return false; } } } } } return false; }
private XNode getXNode(Service service) { XDef xdef = new XDef(); xdef.setTargetNamespace(service.getQName().getNamespaceURI()); XService sNode = new XService(); sNode.setName(service.getQName().getLocalPart()); sNode.setParentNode(xdef); return sNode; }
@Test(expected = WSDLException.class) public void nonExistentPortName() throws Exception { Service service = WSDLUtil.getService("MultiplePortService.wsdl", new PortName("HelloWebService:")); Assert.assertNotNull(service); Assert.assertEquals( service.getQName(), new QName("urn:switchyard-component-soap:test-ws:1.0", "HelloWebService")); WSDLUtil.getPort(service, new PortName("HelloWebServiceSpanishPort")); }
@Test public void halfQualifiedPortName() throws Exception { PortName portName = new PortName("HelloWebService:HelloWebServicePort"); Service service = WSDLUtil.getService("MultiplePortService.wsdl", portName); Assert.assertNotNull(service); Assert.assertEquals( service.getQName(), new QName("urn:switchyard-component-soap:test-ws:1.0", "HelloWebService")); Port port = WSDLUtil.getPort(service, portName); Assert.assertNotNull(port); Assert.assertEquals(port.getName(), "HelloWebServicePort"); }
public static String getEndpointName(Binding binding, Definition wsdlDef) { LOG.log(Level.FINE, "Getting endpoint name for an object reference"); Collection<Service> services = CastUtils.cast(wsdlDef.getServices().values()); for (Service serv : services) { Collection<Port> ports = CastUtils.cast(serv.getPorts().values()); for (Port pt : ports) { if (pt.getBinding().equals(binding)) { return pt.getName(); } } } return null; }
@Test public void soapAction() throws Exception { Service service = WSDLUtil.getService("HelloWebService.wsdl", new PortName("HelloWebService:")); Assert.assertNotNull(service); Assert.assertEquals( service.getQName(), new QName("urn:switchyard-component-soap:test-ws:1.0", "HelloWebService")); Port port = WSDLUtil.getPort(service, new PortName("HelloWebServicePort")); Assert.assertNotNull(port); String action = WSDLUtil.getSoapAction(port, "sayHello"); Assert.assertEquals(action, "uri:something:that:needs#tobevalid"); action = WSDLUtil.getSoapAction(port, "helloWS"); Assert.assertEquals(action, ""); }
@Test public void nullPortName() throws Exception { Service service = WSDLUtil.getService("MultiplePortService.wsdl", new PortName(null)); Assert.assertNotNull(service); Assert.assertEquals( service.getQName(), new QName("urn:switchyard-component-soap:test-ws:1.0", "GoodbyeWebService")); Port port = WSDLUtil.getPort(service, new PortName(null)); Assert.assertNotNull(port); Assert.assertEquals(port.getName(), "GoodbyeWebServicePort"); service = WSDLUtil.getService("MultiplePortService.wsdl", new PortName("HelloWebService:")); Assert.assertNotNull(service); Assert.assertEquals( service.getQName(), new QName("urn:switchyard-component-soap:test-ws:1.0", "HelloWebService")); port = WSDLUtil.getPort(service, new PortName(null)); Assert.assertEquals(port.getName(), "HelloWebServicePortFrench"); }
private Map<QName, XNode> getBindings(Service service) { Map<QName, XNode> bindings = new HashMap<QName, XNode>(); if (service.getPorts().values().size() == 0) { throw new ToolException( "Service " + service.getQName() + " does not contain any usable ports"); } Collection<Port> ports = CastUtils.cast(service.getPorts().values()); for (Port port : ports) { Binding binding = port.getBinding(); bindings.put(binding.getQName(), getXNode(service, port)); if (WSDLConstants.NS_WSDL11.equals(binding.getQName().getNamespaceURI())) { throw new ToolException( "Binding " + binding.getQName().getLocalPart() + " namespace set improperly."); } } return bindings; }
public static String getActionURL( Definition wsdlDefinition, String serviceName, String portName, String bindingName, String opName) { Map<?, ?> services = wsdlDefinition.getServices(); Set<?> serviceKeys = services.keySet(); for (Iterator<?> it = serviceKeys.iterator(); it.hasNext(); ) { QName serviceKey = (QName) it.next(); if (serviceName != null && serviceKey.getLocalPart().contentEquals(serviceName)) { Service service = (Service) services.get(serviceKey); Map<?, ?> ports = service.getPorts(); Set<?> portKeys = ports.keySet(); for (Iterator<?> it2 = portKeys.iterator(); it2.hasNext(); ) { String portKey = (String) it2.next(); if (portName != null && portKey.contentEquals(portName)) { Port port = (Port) ports.get(portKey); Binding wsdlBinding = port.getBinding(); List<?> operations = wsdlBinding.getBindingOperations(); for (Iterator<?> it3 = operations.iterator(); it3.hasNext(); ) { BindingOperation operation = (BindingOperation) it3.next(); if (opName != null && operation.getName().contentEquals(opName)) { List<?> attributesList = operation.getExtensibilityElements(); for (Iterator<?> it4 = attributesList.iterator(); it4.hasNext(); ) { Object test = it4.next(); if (test instanceof SOAPOperation) { SOAPOperation soapOp = (SOAPOperation) test; return soapOp.getSoapActionURI(); } else if (test instanceof SOAP12Operation) { SOAP12Operation soapOp = (SOAP12Operation) test; return soapOp.getSoapActionURI(); } } } } } } } } return null; }
private void updateWsaPolicy(String url, WsdlContext newContext) throws Exception { Definition definition = newContext.getDefinition(); policyFlag = false; processPolicy(PolicyUtils.getAttachedPolicy(getBinding(), definition)); Map<?, ?> serviceMap = definition.getAllServices(); if (serviceMap.isEmpty()) log.info("Missing services in [" + url + "], check for bindings"); else { Iterator<?> i = serviceMap.values().iterator(); while (i.hasNext()) { Service service = (Service) i.next(); Map<?, ?> portMap = service.getPorts(); Iterator<?> i2 = portMap.values().iterator(); while (i2.hasNext()) { Port port = (Port) i2.next(); processPolicy(PolicyUtils.getAttachedPolicy(port, definition)); } } } }
protected void updatePublishedEndpointUrl(String publishingUrl, Definition def, QName name) { Collection<Service> services = CastUtils.cast(def.getAllServices().values()); for (Service service : services) { Collection<Port> ports = CastUtils.cast(service.getPorts().values()); if (ports.isEmpty()) { continue; } if (name == null) { setSoapAddressLocationOn(ports.iterator().next(), publishingUrl); break; // only update the first port since we don't target any specific port } else { for (Port port : ports) { if (name.getLocalPart().equals(port.getName())) { setSoapAddressLocationOn(port, publishingUrl); } } } } }
public static void populateEprInfo(EprMetaData info) { if (!info.isValid()) { return; } Binding match = info.getBinding(); Definition wsdlDef = info.getCandidateWsdlDef(); Collection<Service> services = CastUtils.cast(wsdlDef.getServices().values()); for (Service serv : services) { Collection<Port> ports = CastUtils.cast(serv.getPorts().values()); for (Port pt : ports) { if (pt.getBinding().equals(match)) { info.setPortName(pt.getName()); info.setServiceQName(serv.getQName()); break; } } } if (info.getServiceQName() == null) { Iterator<?> importLists = wsdlDef.getImports().values().iterator(); while (info.getServiceQName() == null && importLists.hasNext()) { List<?> imports = (List<?>) importLists.next(); for (java.lang.Object imp : imports) { if (imp instanceof Import) { Definition importDef = ((Import) imp).getDefinition(); LOG.log(Level.FINE, "following wsdl import " + importDef.getDocumentBaseURI()); info.setCandidateWsdlDef(importDef); populateEprInfo(info); if (info.getServiceQName() != null) { break; } } } } } }
private boolean hasPort(QName serviceName, Port port) { Service service = catalog.lookupService(serviceName); return service.getPorts().containsKey(port.getName()); }
protected static void initializeService( org.w3c.dom.Element service, TProcess bpelProcess, TPartnerLink pl, java.util.Collection<javax.wsdl.Definition> wsdls, org.w3c.dom.Element partnerLinkTypes, java.util.Map<String, String> nsMap) { QName serviceName = null; String servicePort = null; // Get partner link type details QName partnerLinkType = pl.getPartnerLinkType(); org.w3c.dom.NodeList nl = partnerLinkTypes.getChildNodes(); String portType = null; for (int i = 0; portType == null && i < nl.getLength(); i++) { org.w3c.dom.Node n = nl.item(i); if (n instanceof org.w3c.dom.Element && XMLUtils.getLocalname(n.getNodeName()).equals(PARTNER_LINK_TYPE)) { org.w3c.dom.Element plt = (org.w3c.dom.Element) nl.item(i); String name = plt.getAttribute("name"); if (name != null && name.equals(partnerLinkType.getLocalPart())) { org.w3c.dom.NodeList nl2 = plt.getChildNodes(); for (int j = 0; portType == null && j < nl2.getLength(); j++) { org.w3c.dom.Node n2 = nl2.item(j); if (n2 instanceof org.w3c.dom.Element && XMLUtils.getLocalname(n2.getNodeName()).equals("role")) { org.w3c.dom.Element role = (org.w3c.dom.Element) n2; String roleName = role.getAttribute("name"); if ((pl.getMyRole() != null && pl.getMyRole().equals(roleName)) || (pl.getPartnerRole() != null && pl.getPartnerRole().equals(roleName))) { portType = role.getAttribute("portType"); String ptprefix = XMLUtils.getPrefix(portType); String ptns = partnerLinkTypes.getAttribute("xmlns:" + ptprefix); String newprefix = XMLUtils.getPrefixForNamespace(ptns, nsMap); portType = newprefix + ":" + XMLUtils.getLocalname(portType); } } } } } } if (portType != null) { String portTypePrefix = XMLUtils.getPrefix(portType); String portTypeNS = XMLUtils.getNamespaceForPrefix(portTypePrefix, nsMap); QName ptQName = new QName(portTypeNS, XMLUtils.getLocalname(portType)); for (javax.wsdl.Definition wsdl : wsdls) { if (wsdl.getTargetNamespace().equals(portTypeNS)) { @SuppressWarnings("unchecked") java.util.Collection<javax.wsdl.Service> services = wsdl.getServices().values(); for (javax.wsdl.Service s : services) { @SuppressWarnings("unchecked") java.util.Collection<javax.wsdl.Port> ports = s.getPorts().values(); for (javax.wsdl.Port p : ports) { if (p.getBinding() != null && p.getBinding().getPortType() != null && p.getBinding().getPortType().getQName().equals(ptQName)) { serviceName = s.getQName(); servicePort = p.getName(); } } } } } if (serviceName != null) { String prefix = XMLUtils.getPrefixForNamespace(serviceName.getNamespaceURI(), nsMap); service.setAttribute("name", prefix + ":" + serviceName.getLocalPart()); } if (servicePort != null) { service.setAttribute("port", servicePort); } } }
/** * Build the WSDL model. * * @param abstractService collected Service information * @param prebuild XSD generator for type section * @return WSDL definition */ public Definition buildDefinition(AbstractService abstractService, XsdSchemaGenerator xsdgen) throws WSDLException, java.lang.Exception { String serviceName = helper.reformatOWLSSupportedByString(abstractService.getID()); String serviceDescription = abstractService.getDescription(); Map<String, Vector<AbstractServiceParameter>> mapInputs = new HashMap<String, Vector<AbstractServiceParameter>>(); Map<String, Vector<AbstractServiceParameter>> mapOutputs = new HashMap<String, Vector<AbstractServiceParameter>>(); Map<String, AtomicProcess> mapProcesses = new HashMap<String, AtomicProcess>(); System.out.println("[BUILD] Servicename: " + serviceName); System.out.println("[BUILD] description: " + serviceDescription); if (!this.validateServiceParameterTypes(abstractService)) { throw new Exception("Error in parameter list. Datatype not found."); } Vector<AtomicProcess> processes = abstractService.getProcesses(); Iterator<AtomicProcess> itA = processes.iterator(); while (itA.hasNext()) { AtomicProcess ap = itA.next(); Vector<AbstractServiceParameter> inputParameter = ap.getInputParameter(); Vector<AbstractServiceParameter> outputParameter = ap.getOutputParameter(); String operationName = ap.getName(); // for (int i = 0; i < ap.getOutputParameter().size(); i++) { // String operationName = "get" // + ((AbstractServiceParameter) ap // .getOutputParameter().get(i)).getID(); System.out.println("[BUILD] Operation : " + operationName); // } mapInputs.put(operationName, inputParameter); mapOutputs.put(operationName, outputParameter); mapProcesses.put(operationName, ap); } WSDLFactory wsdlFactory = WSDLFactory.newInstance(); ExtensionRegistry extensionRegistry = wsdlFactory.newPopulatedExtensionRegistry(); Definition def = wsdlFactory.newDefinition(); SchemaSerializer schemaSer = new SchemaSerializer(); extensionRegistry.setDefaultSerializer(schemaSer); // // NAMESPACE // // e.g. "http://dmas.dfki.de/axis/services/" int index = abstractService.getBase().lastIndexOf("."); String targetNS = abstractService.getBase().substring(0, index); if (OWLS2WSDLSettings.getInstance().getProperty("CHANGE_TNS").equals("yes")) { String tns_basepath = OWLS2WSDLSettings.getInstance().getProperty("TNS_BASEPATH"); targetNS = tns_basepath + serviceName; def.setQName(new QName(tns_basepath, serviceName)); // +"Service")); } else { def.setQName( new QName(abstractService.getBasePath(), serviceName)); // abstractService.getID())); } System.out.println("abstractService.getBase : " + abstractService.getBase()); System.out.println("abstractService.getBasePath: " + abstractService.getBasePath()); // def.setDocumentBaseURI("http://document/base"); def.setTargetNamespace(targetNS); def.addNamespace("tns", targetNS); def.addNamespace("intf", targetNS); def.addNamespace("impl", targetNS + "-impl"); def.addNamespace("", targetNS); def.addNamespace("xsd", "http://www.w3.org/2001/XMLSchema"); def.addNamespace("wsdl", "http://schemas.xmlsoap.org/wsdl/"); def.addNamespace("wsdlsoap", "http://schemas.xmlsoap.org/wsdl/soap/"); def.addNamespace("SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/"); def.addNamespace("apachesoap", "http://xml.apache.org/xml-soap"); System.out.println("INFO: " + def.getQName().toString()); System.out.println("tns : " + def.getNamespace("tns" + serviceName)); // WA: xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" // WA: xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" // // IMPORTS AND TYPES // /* * Import importsec = def.createImport(); importsec.setDefinition(def); * importsec.setLocationURI("locationURI"); * importsec.setNamespaceURI("nsURI"); def.addImport(importsec); */ // LESEN DES SCHEMAS AUS DATEISYSTEM // =========================================== // DOMParser domp = new DOMParser(); // try { // //domp.parse("file:/D:/development/xsd/generated.xsd"); // domp.parse("file:/D:/tmp/StEmilion.xsd"); // } // catch(Exception e) { e.printStackTrace(); } // // Document doc = domp.getDocument(); // Element element = doc.getDocumentElement(); // ============================================================================= Element element = null; try { // construct schema model for all parameter Iterator<Entry<String, Vector<AbstractServiceParameter>>> itAp = mapInputs.entrySet().iterator(); while (itAp.hasNext()) { for (Iterator<AbstractServiceParameter> it = itAp.next().getValue().iterator(); it.hasNext(); ) { AbstractServiceParameter param = it.next(); System.out.println("[BUILD] IN :" + param.getUri()); if (!this.isPrimitiveType(param.getUri())) { xsdgen.appendToSchema( AbstractDatatypeKB.getInstance().getAbstractDatatypeKBData().get(param.getUri())); System.out.println("[BUILD] added to type section."); } } } itAp = mapOutputs.entrySet().iterator(); while (itAp.hasNext()) { for (Iterator<AbstractServiceParameter> it = itAp.next().getValue().iterator(); it.hasNext(); ) { AbstractServiceParameter param = it.next(); System.out.println("[BUILD] OUT :" + param.getUri()); if (!this.isPrimitiveType(param.getUri())) { xsdgen.appendToSchema( AbstractDatatypeKB.getInstance().getAbstractDatatypeKBData().get(param.getUri())); System.out.println("[BUILD] added to type section."); } } } xsdgen.deleteObsoleteTypesFromSchema(); // org.jdom.Document jdoc = // XMLUtils.convertSchemaToElement(AbstractDatatypeKB.getInstance().getXmlSchemaElement("http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine#StEmilion", // false, -1)).getDocument(); org.jdom.Document jdoc = XMLUtils.convertSchemaToElement(xsdgen.getSchema()).getDocument(); DOMOutputter w3cOutputter = new DOMOutputter(); Document doc = w3cOutputter.output(jdoc); element = doc.getDocumentElement(); NamedNodeMap attList = element.getAttributes(); for (int i = 0; i < attList.getLength(); i++) { Node n = element.getAttributes().item(i); if (n.getTextContent().equals("http://www.w3.org/2001/XMLSchema")) { element.removeAttributeNode((Attr) n); } } element.setAttribute("targetNamespace", targetNS); element.setAttribute("xmlns", targetNS); } catch (org.jdom.JDOMException jdome) { jdome.printStackTrace(); } catch (org.xml.sax.SAXException saxe) { saxe.printStackTrace(); } catch (java.io.IOException ioe) { ioe.printStackTrace(); } catch (java.lang.Exception e) { e.printStackTrace(); } UnknownExtensibilityElement extensibilityElement = new UnknownExtensibilityElement(); extensibilityElement.setElement(element); extensibilityElement.setElementType(new QName(element.getNamespaceURI())); extensibilityElement.setRequired(Boolean.TRUE); // System.out.println("EXENSIBILITYELEMENT: "+extensibilityElement); Types types = def.getTypes(); types = def.createTypes(); types.addExtensibilityElement(extensibilityElement); def.setTypes(types); // Schema schema = new SchemaImpl(); // DOMParser domp = new DOMParser(); // try { // domp.parse("file:/D:/development/xsd/generated.xsd"); // Document doc = domp.getDocument(); // NodeList nodes = doc.getElementsByTagName("xsd:schema"); // for(int i=0; i<nodes.getLength();i++) { // schema.setElement(doc.getDocumentElement()); // schema.setElementType(new QName(nodes.item(i).getNamespaceURI())); // schema.setDocumentBaseURI(nodes.item(i).getNamespaceURI()); // types.addExtensibilityElement(schema); // def.setTypes(types); // } // System.out.println("DOC1:"+doc.toString()); // System.out.println("NODES:"+nodes.getLength()); // } // catch(Exception e) { // e.printStackTrace(); // } // //UnknownExtensibilityElement extensibilityElement = new // UnknownExtensibilityElement(); // // org.jdom.Element jdelem = XMLUtils.convertSchemaToElement(schema); // // System.out.println("JDOM ELEMENT: "+jdelem.toString()); // http://mail-archives.apache.org/mod_mbox/ws-axis-dev/200406.mbox/%[email protected]%3e // // Schema schema = (Schema) // extensionRegistry.createExtension(javax.wsdl.Types, new // QName("http://www.w3.org/2001/XMLSchema", "schema")); // DocumentBuilderFactory factory = // DocumentBuilderFactory.newInstance(); // DocumentBuilder builder = factory.newDocumentBuilder(); // Document schemaDeclaration = builder.newDocument(); // //... (populate schemaDeclaration with elements and types) // schema.setDeclaration(schemaDeclaration); // types.addExtensibilityElement(schema); // (get-) Operation name // String operationName = "get"; // for (int i = 0; i < outputParameter.size(); i++) { // AbstractServiceParameter param = (AbstractServiceParameter) outputParameter // .get(i); // operationName += param.getID(); // } // // MESSAGES, PARTS // ================================================================= // description fehlt noch Service service = def.createService(); // service.setDocumentationElement() service.setQName(new QName(targetNS, serviceName + "Service")); SOAPBinding soapBinding = (SOAPBinding) extensionRegistry.createExtension( Binding.class, new QName("http://schemas.xmlsoap.org/wsdl/soap/", "binding")); soapBinding.setTransportURI("http://schemas.xmlsoap.org/soap/http"); soapBinding.setStyle("rpc"); SOAPBody body = (SOAPBody) extensionRegistry.createExtension( BindingInput.class, new QName("http://schemas.xmlsoap.org/wsdl/soap/", "body")); body.setUse("literal"); ArrayList<String> listOfStyles = new ArrayList<String>(); listOfStyles.add("http://schemas.xmlsoap.org/soap/encoding/"); body.setEncodingStyles(listOfStyles); body.setNamespaceURI(targetNS); Binding binding = def.createBinding(); // == add PortType and Binding to WSDL defintion PortType portType = def.createPortType(); portType.setQName(new QName(targetNS, serviceName + "PortType")); // == Binding section binding.setQName(new QName(targetNS, serviceName + "Binding")); binding.addExtensibilityElement(soapBinding); BindingInput binding_input = def.createBindingInput(); // binding_input.setName("BINDING IN"); binding_input.addExtensibilityElement(body); BindingOutput binding_out = def.createBindingOutput(); // binding_out.setName("BINDING OUT"); binding_out.addExtensibilityElement(body); Iterator<Entry<String, Vector<AbstractServiceParameter>>> itOps = mapInputs.entrySet().iterator(); while (itOps.hasNext()) { Entry<String, Vector<AbstractServiceParameter>> op = itOps.next(); String operationName = op.getKey(); AtomicProcess ap = mapProcesses.get(operationName); Vector<AbstractServiceParameter> inputParameter = mapInputs.get(operationName); Vector<AbstractServiceParameter> outputParameter = mapOutputs.get(operationName); Message request = def.createMessage(); request.setQName(new QName(targetNS, operationName + "Request")); boolean duplicateInputs = false; boolean duplicateOutputs = false; if (ap.hasDuplicateInputParameter()) { duplicateInputs = true; } if (ap.hasDuplicateOutputParameter()) { duplicateOutputs = true; } for (int ipi = 0; ipi < inputParameter.size(); ipi++) { AbstractServiceParameter param = (AbstractServiceParameter) inputParameter.get(ipi); Part part = def.createPart(); if (duplicateInputs) { part.setName(param.getID() + String.valueOf(param.getPos())); } else { part.setName(param.getID()); } System.out.println("SET TYPE OF PART: " + param.toString()); if (param.isPrimitiveXsdType()) { part.setTypeName(new QName("http://www.w3.org/2001/XMLSchema", param.getTypeLocal())); } else { part.setTypeName(new QName(targetNS, param.getTypeRemote())); } request.addPart(part); } request.setUndefined(false); def.addMessage(request); Message response = def.createMessage(); response.setQName(new QName(targetNS, operationName + "Response")); for (int opi = 0; opi < outputParameter.size(); opi++) { AbstractServiceParameter param = (AbstractServiceParameter) outputParameter.get(opi); Part part = def.createPart(); if (duplicateOutputs) { part.setName(param.getID() + String.valueOf(param.getPos())); } else { part.setName(param.getID()); } System.out.println("SET TYPE OF PART: " + param.toString()); if (param.isPrimitiveXsdType()) { part.setTypeName(new QName("http://www.w3.org/2001/XMLSchema", param.getTypeLocal())); } else { part.setTypeName(new QName(targetNS, param.getTypeRemote())); } response.addPart(part); } response.setUndefined(false); def.addMessage(response); // // PORTTYPE, OPERATION // Input input = def.createInput(); input.setMessage(request); Output output = def.createOutput(); output.setMessage(response); // == build the wsdl operation + bindings for each owls output parameter Operation operation = def.createOperation(); // operation.setName(operationName); operation.setName(ap.getOperationName()); operation.setInput(input); operation.setOutput(output); operation.setUndefined(false); portType.addOperation(operation); portType.setUndefined(false); SOAPOperation soapOperation = (SOAPOperation) extensionRegistry.createExtension( BindingOperation.class, new QName("http://schemas.xmlsoap.org/wsdl/soap/", "operation")); soapOperation.setSoapActionURI(""); // soapOperation.setStyle("document"); BindingOperation binding_op = def.createBindingOperation(); // binding_op.setName(operationName); binding_op.setName(ap.getOperationName()); binding_op.addExtensibilityElement(soapOperation); binding_op.setOperation(operation); binding_op.setBindingInput(binding_input); binding_op.setBindingOutput(binding_out); binding.addBindingOperation(binding_op); binding.setPortType(portType); binding.setUndefined(false); def.addBinding(binding); } def.addPortType(portType); // // SERVICE // SOAPAddress soapAddress = (SOAPAddress) extensionRegistry.createExtension( Port.class, new QName("http://schemas.xmlsoap.org/wsdl/soap/", "address")); soapAddress.setLocationURI(targetNS); Port port = def.createPort(); port.setName(serviceName + "Port"); port.setBinding(binding); port.addExtensibilityElement(soapAddress); service.addPort(port); def.addService(service); return def; }
private void convertService(Service service) throws IOException { // String comment = service.getDocumentationElement().getNodeValue(); for (Entry<String, Port> entry : (Set<Entry<String, Port>>) service.getPorts().entrySet()) { convertPort(entry.getValue()); } }