Java tutorial
/** * Copyright (c) 2012 centeractive ag. All Rights Reserved. * * 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 com.centeractive.ws.builder.core; import com.centeractive.ws.SoapBuilderException; import com.centeractive.ws.SoapContext; import com.centeractive.ws.builder.*; import com.centeractive.ws.legacy.SoapLegacyFacade; import com.google.common.base.Preconditions; import org.apache.commons.lang3.StringUtils; import javax.wsdl.Binding; import javax.wsdl.WSDLException; import javax.xml.namespace.QName; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; /** * @author Tom Bujok * @since 1.0.0 */ public final class WsdlParser { private final URL wsdlUrl; private final SoapLegacyFacade soapFacade; private WsdlParser(URL wsdlUrl) { try { this.wsdlUrl = wsdlUrl; this.soapFacade = new SoapLegacyFacade(wsdlUrl); } catch (WSDLException e) { throw new SoapBuilderException(e); } } public static WsdlParser parse(URL wsdlUrl) { Preconditions.checkNotNull(wsdlUrl, "URL of the WSDL cannot be null"); return new WsdlParser(wsdlUrl); } public static WsdlParser parse(String wsdlUrl) { Preconditions.checkNotNull(wsdlUrl, "URL of the WSDL cannot be null"); try { return new WsdlParser(new URL(wsdlUrl)); } catch (MalformedURLException e) { throw new SoapBuilderException(e); } } public List<QName> getBindings() { return soapFacade.getBindingNames(); } public void printBindings() { System.out.println(wsdlUrl); for (QName bindingName : soapFacade.getBindingNames()) { System.out.println("\t" + bindingName.toString()); } } public SoapBuilderFinderResult binding(final String bindingName) { Preconditions.checkNotNull(bindingName); return new SoapBuilderFinderResult() { @Override public SoapBuilder builder() { return getBuilder(QName.valueOf(bindingName), SoapContext.DEFAULT); } @Override public SoapBuilder builder(final SoapContext context) { return getBuilder(QName.valueOf(bindingName), context); } @Override public SoapOperationFinder operation() { return builder().operation(); } }; } public SoapBuilderFinderResult binding(final QName bindingName) { Preconditions.checkNotNull(bindingName); return new SoapBuilderFinderResult() { @Override public SoapBuilder builder() { return getBuilder(bindingName, SoapContext.DEFAULT); } @Override public SoapBuilder builder(final SoapContext context) { return getBuilder(bindingName, context); } @Override public SoapOperationFinder operation() { return builder().operation(); } }; } public SoapBuilderFinder binding() { return new SoapBuilderFinder() { private String namespaceURI; private String localPart; private String prefix; @Override public SoapBuilderFinder namespaceURI(String namespaceURI) { this.namespaceURI = namespaceURI; return this; } @Override public SoapBuilderFinder localPart(String localPart) { this.localPart = localPart; return this; } @Override public SoapBuilderFinder prefix(String prefix) { this.prefix = prefix; return this; } @Override public SoapBuilder builder() { validate(); return getBuilder(getBindingName(), SoapContext.DEFAULT); } @Override public SoapBuilder builder(SoapContext context) { validate(); return getBuilder(getBindingName(), context); } @Override public SoapOperationFinder operation() { return builder().operation(); } private QName getBindingName() { List<QName> result = new ArrayList<QName>(); for (QName bindingName : soapFacade.getBindingNames()) { if (bindingName.getLocalPart().equals(localPart)) { if (namespaceURI != null) { if (!bindingName.getNamespaceURI().equals(namespaceURI)) { continue; } } if (prefix != null) { if (!bindingName.getPrefix().equals(prefix)) { continue; } } result.add(bindingName); } } if (result.isEmpty()) { throw new SoapBuilderException("Binding not found"); } if (result.size() > 1) { throw new SoapBuilderException("Found more than one binding " + result); } return result.iterator().next(); } private void validate() { if (StringUtils.isBlank(localPart)) { throw new SoapBuilderException("Specify at least localPart of the binding's QName"); } } }; } public SoapBuilder getBuilder(String bindingName) { return getBuilder(QName.valueOf(bindingName)); } public SoapBuilder getBuilder(QName bindingName) { return getBuilder(bindingName, SoapContext.builder().build()); } public SoapBuilder getBuilder(String bindingName, SoapContext context) { return getBuilder(QName.valueOf(bindingName), context); } public SoapBuilder getBuilder(QName bindingName, SoapContext context) { Preconditions.checkNotNull(context, "SoapContext cannot be null"); Binding binding = soapFacade.getBindingByName(bindingName); return new SoapBuilderImpl(soapFacade, binding, context); } public URL saveWsdl(String rootFileName, File folder) { return soapFacade.saveWsdl(rootFileName, folder); } public static URL saveWsdl(URL wsdlUrl, String rootFileName, File folder) { return SoapLegacyFacade.saveWsdl(rootFileName, wsdlUrl, folder); } }