/**
* 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.cxf.transport.jms.uri;
import org.apache.cxf.service.model.BindingInfo;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.transport.jms.wsdl.DeliveryModeType;
import org.apache.cxf.transport.jms.wsdl.JndiConnectionFactoryNameType;
import org.apache.cxf.transport.jms.wsdl.JndiContextParameterType;
import org.apache.cxf.transport.jms.wsdl.JndiInitialContextFactoryType;
import org.apache.cxf.transport.jms.wsdl.JndiURLType;
import org.apache.cxf.transport.jms.wsdl.PriorityType;
import org.apache.cxf.transport.jms.wsdl.ReplyToNameType;
import org.apache.cxf.transport.jms.wsdl.TimeToLiveType;
import org.apache.cxf.transport.jms.wsdl.TopicReplyToNameType;
public final class JMSEndpointWSDLUtil {
private JMSEndpointWSDLUtil() {
}
/**
* Retrieve JMS spec configs from wsdl and write them to the JMSEndpoint
* If a property is already set on the JMSEndpoint it will not be overwritten
*
* @param endpoint
* @param ei
*/
static void retrieveWSDLInformation(JMSEndpoint endpoint, EndpointInfo ei) {
// TODO We could have more than one parameter
JndiContextParameterType jndiContextParameterType =
getWSDLExtensor(ei, JndiContextParameterType.class);
if (jndiContextParameterType != null) {
endpoint.putJndiParameter(jndiContextParameterType.getName().trim(),
jndiContextParameterType.getValue().trim());
}
JndiConnectionFactoryNameType jndiConnectionFactoryNameType
= getWSDLExtensor(ei, JndiConnectionFactoryNameType.class);
if (jndiConnectionFactoryNameType != null) {
endpoint.setJndiConnectionFactoryName(jndiConnectionFactoryNameType.getValue().trim());
}
JndiInitialContextFactoryType jndiInitialContextFactoryType
= getWSDLExtensor(ei, JndiInitialContextFactoryType.class);
if (jndiInitialContextFactoryType != null) {
endpoint.setJndiInitialContextFactory(jndiInitialContextFactoryType.getValue().trim());
}
JndiURLType jndiURLType = getWSDLExtensor(ei, JndiURLType.class);
if (jndiURLType != null) {
endpoint.setJndiURL(jndiURLType.getValue().trim());
}
DeliveryModeType deliveryModeType = getWSDLExtensor(ei, DeliveryModeType.class);
if (deliveryModeType != null) {
String deliveryMode = deliveryModeType.getValue().trim();
endpoint.setDeliveryMode(org.apache.cxf.transport.jms.uri.JMSEndpoint.DeliveryModeType
.valueOf(deliveryMode));
}
PriorityType priorityType = getWSDLExtensor(ei, PriorityType.class);
if (priorityType != null) {
endpoint.setPriority(priorityType.getValue());
}
TimeToLiveType timeToLiveType = getWSDLExtensor(ei, TimeToLiveType.class);
if (timeToLiveType != null) {
endpoint.setTimeToLive(timeToLiveType.getValue());
}
ReplyToNameType replyToNameType = getWSDLExtensor(ei, ReplyToNameType.class);
if (replyToNameType != null) {
endpoint.setReplyToName(replyToNameType.getValue());
}
TopicReplyToNameType topicReplyToNameType = getWSDLExtensor(ei, TopicReplyToNameType.class);
if (topicReplyToNameType != null) {
endpoint.setTopicReplyToName(topicReplyToNameType.getValue());
}
}
public static <T> T getWSDLExtensor(EndpointInfo ei, Class<T> cls) {
ServiceInfo si = ei.getService();
BindingInfo bi = ei.getBinding();
Object o = ei.getExtensor(cls);
if (o == null && si != null) {
o = si.getExtensor(cls);
}
if (o == null && bi != null) {
o = bi.getExtensor(cls);
}
if (o == null) {
return null;
}
if (cls.isInstance(o)) {
return cls.cast(o);
}
return null;
}
}