blob: 4f7d4e0c54dd832c29efbcfd068dbee97837f9e5 [file] [log] [blame]
/*
* 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.openejb.assembler.classic;
import org.apache.openejb.Injection;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.core.webservices.HandlerChainData;
import org.apache.openejb.core.webservices.HandlerData;
import org.apache.openejb.core.webservices.PortData;
import javax.xml.namespace.QName;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class WsBuilder {
public static PortData toPortData(final PortInfo port, final Collection<Injection> injections, final URL baseUrl, final ClassLoader classLoader) throws OpenEJBException {
final PortData portData = new PortData();
portData.setPortId(port.portId);
if (port.serviceName != null && port.serviceName.length() != 0) {
portData.setServiceName(QName.valueOf(port.serviceName));
}
if (port.portName != null && port.portName.length() != 0) {
portData.setPortName(QName.valueOf(port.portName));
}
portData.setWsdlUrl(getWsdlURL(port.wsdlFile, baseUrl, classLoader));
portData.getHandlerChains().addAll(toHandlerChainData(port.handlerChains, classLoader));
portData.getInjections().addAll(injections);
portData.setMtomEnabled(port.mtomEnabled);
portData.setBindingID(port.binding);
portData.setWsdlPort(port.wsdlPort);
portData.setWsdlService(port.wsdlService);
portData.setLocation(port.location);
portData.setSecure("WS-SECURITY".equals(port.authMethod));
portData.setProperties(port.properties);
return portData;
}
public static List<HandlerChainData> toHandlerChainData(final List<HandlerChainInfo> chains, final ClassLoader classLoader) throws OpenEJBException {
final List<HandlerChainData> handlerChains = new ArrayList<>();
for (final HandlerChainInfo handlerChain : chains) {
final List<HandlerData> handlers = new ArrayList<>();
for (final HandlerInfo handler : handlerChain.handlers) {
try {
final Class<?> handlerClass = classLoader.loadClass(handler.handlerClass);
final HandlerData handlerData = new HandlerData(handlerClass);
handlerData.getInitParams().putAll(handler.initParams);
handlerData.getSoapHeaders().addAll(handler.soapHeaders);
handlerData.getSoapRoles().addAll(handler.soapRoles);
handlers.add(handlerData);
} catch (final ClassNotFoundException e) {
throw new OpenEJBException("Could not load handler class " + handler.handlerClass);
}
}
final HandlerChainData handlerChainData = new HandlerChainData(handlerChain.serviceNamePattern,
handlerChain.portNamePattern,
handlerChain.protocolBindings,
handlers);
handlerChains.add(handlerChainData);
}
return handlerChains;
}
public static URL getWsdlURL(final String wsdlFile, final URL baseUrl, final ClassLoader classLoader) {
URL wsdlURL = null;
if (wsdlFile != null && wsdlFile.length() > 0) {
try {
wsdlURL = new URL(wsdlFile);
} catch (final MalformedURLException e) {
// Not a URL, try as a resource
wsdlURL = classLoader.getResource(wsdlFile);
if (wsdlURL == null && baseUrl != null) {
// Cannot get it as a resource, try with
// configurationBaseUrl
try {
wsdlURL = new URL(baseUrl, wsdlFile);
} catch (final MalformedURLException ee) {
// ignore
}
}
}
}
return wsdlURL;
}
}