wsdl20toaxisservicebuilder.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,128 行 · 第 1/4 页
JAVA
1,128 行
Service[] services = description.getServices();
if (services.length == 0) {
throw new AxisFault("No wsdlService found in the WSDL");
}
if (serviceName != null) {
for (int i = 0; i < services.length; i++) {
if (serviceName.equals(services[i].getName())) {
wsdlService = services[i];
break; // found it. Stop looking.
}
}
if (wsdlService == null) {
throw new AxisFault("Service with the specified name not found in the WSDL : "
+ serviceName.getLocalPart());
}
} else {
wsdlService = services[0];
}
axisService.setName(wsdlService.getName().getLocalPart().toString());
Interface serviceInterface = wsdlService.getInterface();
axisService.addParameter(new Parameter(WSDL2Constants.INTERFACE_LOCAL_NAME, serviceInterface.getName().getLocalPart()));
processInterface(serviceInterface);
if (isCodegen) {
axisService.setOperationsNameList(operationNames);
}
processEndpoints(serviceInterface);
}
private AxisEndpoint processEndpoint(Endpoint endpoint, Interface serviceInterface) throws AxisFault {
AxisEndpoint axisEndpoint = new AxisEndpoint();
axisEndpoint.setName(endpoint.getName().toString());
axisEndpoint.setEndpointURL(endpoint.getAddress().toString());
if (processedBindings.containsKey(endpoint.getBinding().getName())) {
axisEndpoint.setBinding(
(AxisBinding) processedBindings.get(endpoint.getBinding().getName()));
} else {
axisEndpoint.setBinding(processBinding(endpoint.getBinding(), serviceInterface));
}
SOAPEndpointExtensions soapEndpointExtensions = null;
try {
soapEndpointExtensions = (SOAPEndpointExtensions) endpoint
.getComponentExtensionsForNamespace(new URI(WSDL2Constants.URI_WSDL2_SOAP));
} catch (URISyntaxException e) {
throw new AxisFault("HTTP Binding Extention not found");
}
if (soapEndpointExtensions != null) {
axisEndpoint.setProperty(WSDL2Constants.ATTR_WHTTP_AUTHENTICATION_TYPE,
soapEndpointExtensions.getHttpAuthenticationScheme());
axisEndpoint.setProperty(WSDL2Constants.ATTR_WHTTP_AUTHENTICATION_REALM,
soapEndpointExtensions.getHttpAuthenticationRealm());
}
addDocumentation(axisEndpoint, endpoint.toElement());
return axisEndpoint;
}
/**
* contains all code which gathers non-wsdlService specific information from the
* wsdl.
* <p/>
* After all the setup completes successfully, the setupComplete field is
* set so that any subsequent calls to setup() will result in a no-op. Note
* that subclass WSDL20ToAllAxisServicesBuilder will call populateService
* for each endpoint in the WSDL. Separating the non-wsdlService specific
* information here allows WSDL20ToAllAxisServicesBuilder to only do this
* work 1 time per WSDL, instead of for each endpoint on each wsdlService.
*
* @throws AxisFault
*/
protected void setup() throws AxisFault, WSDLException {
if (setupComplete) { // already setup, just do nothing and return
return;
}
try {
if (description == null) {
Description description = null;
DescriptionElement descriptionElement = null;
if (wsdlURI != null && !"".equals(wsdlURI)) {
description = readInTheWSDLFile(wsdlURI);
descriptionElement = description.toElement();
} else if (in != null) {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(in);
WSDLReader reader = DOMWSDLFactory.newInstance().newWSDLReader();
// This turns on WSDL validation which is set off by default.
reader.setFeature(WSDLReader.FEATURE_VALIDATION, true);
WSDLSource wsdlSource = reader.createWSDLSource();
wsdlSource.setSource(document.getDocumentElement());
wsdlSource.setBaseURI(new URI(getBaseUri()));
description = reader.readWSDL(wsdlSource);
descriptionElement = description.toElement();
} else {
throw new AxisFault("No resources found to read the wsdl");
}
savedTargetNamespace = descriptionElement.getTargetNamespace().toString();
namespacemap = descriptionElement.getNamespaces();
this.description = description;
}
// Create the namespacemap
stringBasedNamespaceMap = new NamespaceMap();
Iterator iterator = namespacemap.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
stringBasedNamespaceMap.put(key, (namespacemap.get(key)).toString());
}
setupComplete = true;
} catch (AxisFault e) {
throw e; // just rethrow AxisFaults
} catch (WSDLException e) {
// Preserve the WSDLException
throw e;
} catch(Exception e) {
throw AxisFault.makeFault(e);
}
}
private AxisBinding processBinding(Binding binding, Interface serviceInterface)
throws AxisFault {
AxisBinding axisBinding = new AxisBinding();
axisBinding.setName(binding.getName());
String bindingType = binding.getType().toString();
axisBinding.setType(bindingType);
if (bindingType.equals(WSDL2Constants.URI_WSDL2_SOAP)) {
processSOAPBindingExtention(binding, axisBinding, serviceInterface);
} else if (bindingType.equals(WSDL2Constants.URI_WSDL2_HTTP)) {
processHTTPBindingExtention(binding, axisBinding, serviceInterface);
}
// We should process the interface based on the service not on a binding
processedBindings.put(binding.getName(), axisBinding);
addDocumentation(axisBinding, binding.toElement());
return axisBinding;
}
private void processSOAPBindingExtention(Binding binding, AxisBinding axisBinding, Interface serviceInterface)
throws AxisFault {
// Capture all the binding specific properties
// Set a comparator so tha httpLocations are stored in decending order
Map httpLocationTable = new TreeMap(new Comparator(){
public int compare(Object o1, Object o2) {
return (-1 * ((Comparable)o1).compareTo(o2));
}
});
SOAPBindingExtensionsImpl soapBindingExtensions = null;
try {
soapBindingExtensions = (SOAPBindingExtensionsImpl) binding
.getComponentExtensionsForNamespace(new URI(WSDL2Constants.URI_WSDL2_SOAP));
} catch (URISyntaxException e) {
throw new AxisFault("Soap Binding Extention not found");
}
String soapVersion;
if ((soapVersion = soapBindingExtensions.getSoapVersion()) != null) {
if (soapVersion.equals(WSDL2Constants.SOAP_VERSION_1_1)) {
axisBinding.setProperty(WSDL2Constants.ATTR_WSOAP_VERSION,
SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
} else {
axisBinding.setProperty(WSDL2Constants.ATTR_WSOAP_VERSION,
SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
}
} else {
// Set the default to soap 1.2
axisBinding.setProperty(WSDL2Constants.ATTR_WSOAP_VERSION,
WSDL20DefaultValueHolder.getDefaultValue(
WSDL2Constants.ATTR_WSOAP_VERSION));
}
URI soapUnderlyingProtocol = soapBindingExtensions.getSoapUnderlyingProtocol();
if (soapUnderlyingProtocol != null) {
axisBinding.setProperty(WSDL2Constants.ATTR_WSOAP_PROTOCOL,
soapUnderlyingProtocol.toString());
}
URI soapMepDefault = soapBindingExtensions.getSoapMepDefault();
if (soapMepDefault != null) {
axisBinding.setProperty(WSDL2Constants.ATTR_WSOAP_MEP,
soapMepDefault.toString());
}
axisBinding.setProperty(WSDL2Constants.ATTR_WHTTP_CONTENT_ENCODING,
soapBindingExtensions.getHttpContentEncodingDefault());
axisBinding.setProperty(WSDL2Constants.ATTR_WSOAP_MODULE,
createSoapModules(soapBindingExtensions.getSoapModules()));
axisBinding.setProperty(WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR,
soapBindingExtensions.getHttpQueryParameterSeparatorDefault());
// Capture all the fault specific properties
BindingFault[] bindingFaults = binding.getBindingFaults();
for (int i = 0; i < bindingFaults.length; i++) {
BindingFaultImpl bindingFault = (BindingFaultImpl) bindingFaults[i];
InterfaceFault interfaceFault = serviceInterface.getFromAllInterfaceFaults(bindingFault.getRef());
AxisBindingMessage axisBindingFault = new AxisBindingMessage();
axisBindingFault.setFault(true);
axisBindingFault.setName(interfaceFault.getName().getLocalPart());
axisBindingFault.setParent(axisBinding);
addDocumentation(axisBindingFault, interfaceFault.toElement());
SOAPBindingFaultExtensions soapBindingFaultExtensions = null;
try {
soapBindingFaultExtensions = (SOAPBindingFaultExtensions) bindingFault
.getComponentExtensionsForNamespace(new URI(WSDL2Constants.URI_WSDL2_SOAP));
} catch (URISyntaxException e) {
throw new AxisFault("Soap Binding Extention not found");
}
axisBindingFault.setProperty(WSDL2Constants.ATTR_WHTTP_HEADER,
createHttpHeaders(
soapBindingFaultExtensions.getHttpHeaders()));
axisBindingFault.setProperty(WSDL2Constants.ATTR_WHTTP_CONTENT_ENCODING,
soapBindingFaultExtensions.getHttpContentEncoding());
axisBindingFault.setProperty(WSDL2Constants.ATTR_WSOAP_CODE,
soapBindingFaultExtensions.getSoapFaultCode());
axisBindingFault.setProperty(WSDL2Constants.ATTR_WSOAP_SUBCODES,
soapBindingFaultExtensions.getSoapFaultSubcodes());
axisBindingFault.setProperty(WSDL2Constants.ATTR_WSOAP_HEADER,
createSoapHeaders(
soapBindingFaultExtensions.getSoapHeaders()));
axisBindingFault.setProperty(WSDL2Constants.ATTR_WSOAP_MODULE,
createSoapModules(
soapBindingFaultExtensions.getSoapModules()));
axisBinding.addFault(axisBindingFault);
}
// Capture all the binding operation specific properties
BindingOperation[] bindingOperations = binding.getBindingOperations();
for (int i = 0; i < bindingOperations.length; i++) {
BindingOperationImpl bindingOperation = (BindingOperationImpl) bindingOperations[i];
AxisBindingOperation axisBindingOperation = new AxisBindingOperation();
InterfaceOperation interfaceOperation = serviceInterface.getFromAllInterfaceOperations(bindingOperation.getRef());
AxisOperation axisOperation =
axisService.getOperation(interfaceOperation.getName());
axisBindingOperation.setAxisOperation(axisOperation);
axisBindingOperation.setParent(axisBinding);
axisBindingOperation.setName(axisOperation.getName());
addDocumentation(axisBindingOperation, bindingOperation.toElement());
SOAPBindingOperationExtensions soapBindingOperationExtensions = null;
try {
soapBindingOperationExtensions = ((SOAPBindingOperationExtensions)
bindingOperation.getComponentExtensionsForNamespace(
new URI(WSDL2Constants.URI_WSDL2_SOAP)));
} catch (URISyntaxException e) {
throw new AxisFault("Soap Binding Extention not found");
}
URI soapAction = soapBindingOperationExtensions.getSoapAction();
if (soapAction != null && !"\"\"".equals(soapAction)) {
axisBindingOperation.setProperty(WSDL2Constants.ATTR_WSOAP_ACTION,
soapAction.toString());
}
axisBindingOperation.setProperty(WSDL2Constants.ATTR_WSOAP_MODULE,
createSoapModules(
soapBindingOperationExtensions.getSoapModules()));
URI soapMep = soapBindingOperationExtensions.getSoapMep();
if (soapMep != null) {
axisBindingOperation.setProperty(WSDL2Constants.ATTR_WSOAP_MEP,
soapMep.toString());
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?