muleuniversaltransport.java
来自「提供ESB 应用mule源代码 提供ESB 应用mule源代码」· Java 代码 · 共 250 行
JAVA
250 行
/* * $Id: MuleUniversalTransport.java 12786 2008-09-28 20:34:12Z dandiep $ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com * * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */package org.mule.transport.cxf.transport;import org.mule.transport.cxf.CxfConnector;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import javax.wsdl.Port;import javax.wsdl.extensions.http.HTTPAddress;import javax.wsdl.extensions.soap.SOAPAddress;import javax.xml.namespace.QName;import org.apache.cxf.Bus;import org.apache.cxf.service.Service;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.AbstractTransportFactory;import org.apache.cxf.transport.Conduit;import org.apache.cxf.transport.ConduitInitiator;import org.apache.cxf.transport.Destination;import org.apache.cxf.transport.DestinationFactory;import org.apache.cxf.ws.addressing.AttributedURIType;import org.apache.cxf.ws.addressing.EndpointReferenceType;import org.apache.cxf.wsdl.http.AddressType;import org.apache.cxf.wsdl11.WSDLEndpointFactory;public class MuleUniversalTransport extends AbstractTransportFactory implements ConduitInitiator, DestinationFactory, WSDLEndpointFactory{ public static final String TRANSPORT_ID = "http://mule.codehaus.org/cxf"; private static Set<String> PREFIXES = new HashSet<String>(); static { PREFIXES.add("http://"); PREFIXES.add("https://"); PREFIXES.add("jms://"); PREFIXES.add("vm://"); PREFIXES.add("xmpp://"); PREFIXES.add("smtp://"); PREFIXES.add("tcp://"); } private Map<String, Destination> destinations = new HashMap<String, Destination>(); private Bus bus; private CxfConnector connector; public MuleUniversalTransport(CxfConnector connector) { super(); ArrayList<String> tids = new ArrayList<String>(); tids.add("http://schemas.xmlsoap.org/soap/http"); setTransportIds(tids); this.connector = connector; } public Destination getDestination(EndpointInfo ei) throws IOException { return getDestination(ei, createReference(ei)); } protected Destination getDestination(EndpointInfo ei, EndpointReferenceType reference) throws IOException { String uri = reference.getAddress().getValue(); int idx = uri.indexOf('?'); if (idx != -1) { uri = uri.substring(0, idx); } synchronized (this) { Destination d = destinations.get(uri); if (d == null) { d = createDestination(ei, reference); destinations.put(uri, d); } return d; } } private Destination createDestination(EndpointInfo ei, EndpointReferenceType reference) { return new MuleUniversalDestination(this, reference, ei); } public Conduit getConduit(EndpointInfo ei) throws IOException { return new MuleUniversalConduit(this, connector, ei, null); } public Conduit getConduit(EndpointInfo ei, EndpointReferenceType target) throws IOException { return new MuleUniversalConduit(this, connector, ei, target); } EndpointReferenceType createReference(EndpointInfo ei) { EndpointReferenceType epr = new EndpointReferenceType(); AttributedURIType address = new AttributedURIType(); address.setValue(ei.getAddress()); epr.setAddress(address); return epr; } @Override public Set<String> getUriPrefixes() { return PREFIXES; } public Bus getBus() { return bus; } public void setBus(Bus bus) { this.bus = bus; } void remove(MuleUniversalDestination destination) { destinations.remove(destination.getAddress().getAddress().getValue()); } public CxfConnector getConnector() { return connector; } // Stuff relating to building of the <soap:address/> - // I have no idea how this really works, but it does public void createPortExtensors(EndpointInfo ei, Service service) { // TODO } @SuppressWarnings("unchecked") public EndpointInfo createEndpointInfo(ServiceInfo serviceInfo, BindingInfo b, Port port) { if (port != null) { List ees = port.getExtensibilityElements(); for (Iterator itr = ees.iterator(); itr.hasNext();) { Object extensor = itr.next(); if (extensor instanceof HTTPAddress) { final HTTPAddress httpAdd = (HTTPAddress) extensor; EndpointInfo info = new HttpEndpointInfo(serviceInfo, "http://schemas.xmlsoap.org/wsdl/http/"); info.setAddress(httpAdd.getLocationURI()); info.addExtensor(httpAdd); return info; } else if (extensor instanceof AddressType) { final AddressType httpAdd = (AddressType) extensor; EndpointInfo info = new HttpEndpointInfo(serviceInfo, "http://schemas.xmlsoap.org/wsdl/http/"); info.setAddress(httpAdd.getLocation()); info.addExtensor(httpAdd); return info; } } } HttpEndpointInfo hei = new HttpEndpointInfo(serviceInfo, "http://schemas.xmlsoap.org/wsdl/http/"); AddressType at = new HttpAddressType(); hei.addExtensor(at); return hei; } private static class HttpEndpointInfo extends EndpointInfo { AddressType saddress; HttpEndpointInfo(ServiceInfo serv, String trans) { super(serv, trans); } public void setAddress(String s) { super.setAddress(s); if (saddress != null) { saddress.setLocation(s); } } public void addExtensor(Object el) { super.addExtensor(el); if (el instanceof AddressType) { saddress = (AddressType) el; } } } private static class HttpAddressType extends AddressType implements HTTPAddress, SOAPAddress { public HttpAddressType() { super(); setElementType(new QName("http://schemas.xmlsoap.org/wsdl/soap/", "address")); } public String getLocationURI() { return getLocation(); } public void setLocationURI(String locationURI) { setLocation(locationURI); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?