axisservice2wsdl20.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 440 行 · 第 1/2 页
JAVA
440 行
/*
* 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.axis2.description;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMText;
import org.apache.axis2.util.XMLUtils;
import org.apache.axis2.util.WSDLSerializationUtil;
import org.apache.axis2.util.JavaUtils;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.AddressingConstants;
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.ws.commons.schema.XmlSchema;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.namespace.QName;
import java.io.ByteArrayInputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
import java.net.URI;
public class AxisService2WSDL20 implements WSDL2Constants {
private AxisService axisService;
private String[] eprs = null;
private OMNamespace wsaw;
public AxisService2WSDL20(AxisService service) {
this.axisService = service;
}
/**
* Generates a WSDL 2.0 document for this web service
* @return The WSDL2 document element
* @throws Exception - Thrown in case an exception occurs
*/
public OMElement generateOM() throws Exception {
Map nameSpacesMap = axisService.getNamespaceMap();
OMFactory omFactory = OMAbstractFactory.getOMFactory();
OMNamespace wsdl;
if (nameSpacesMap != null && nameSpacesMap.containsValue(WSDL2Constants.WSDL_NAMESPACE)) {
wsdl = omFactory
.createOMNamespace(WSDL2Constants.WSDL_NAMESPACE,
WSDLSerializationUtil.getPrefix(
WSDL2Constants.WSDL_NAMESPACE, nameSpacesMap));
} else {
wsdl = omFactory
.createOMNamespace(WSDL2Constants.WSDL_NAMESPACE,
WSDL2Constants.DEFAULT_WSDL_NAMESPACE_PREFIX);
}
OMElement descriptionElement = omFactory.createOMElement(WSDL2Constants.DESCRIPTION, wsdl);
// Declare all the defined namespaces in the document
WSDLSerializationUtil.populateNamespaces(descriptionElement, nameSpacesMap);
descriptionElement.declareNamespace(axisService.getTargetNamespace(), axisService.getTargetNamespacePrefix());
wsaw = descriptionElement.declareNamespace(AddressingConstants.Final.WSAW_NAMESPACE, "wsaw");
// Need to add the targetnamespace as an attribute according to the wsdl 2.0 spec
OMAttribute targetNamespace = omFactory
.createOMAttribute(WSDL2Constants.TARGET_NAMESPACE, null,
axisService.getTargetNamespace());
descriptionElement.addAttribute(targetNamespace);
// Check whether the required namespaces are already in namespaceMap, if they are not
// present declare them.
OMNamespace wsoap;
OMNamespace whttp;
OMNamespace wsdlx;
OMNamespace tns = omFactory
.createOMNamespace(axisService.getTargetNamespace(),
axisService.getTargetNamespacePrefix());
if (nameSpacesMap != null && !nameSpacesMap.containsValue(WSDL2Constants.WSDL_NAMESPACE)) {
descriptionElement.declareDefaultNamespace(WSDL2Constants.WSDL_NAMESPACE);
}
if (nameSpacesMap != null && nameSpacesMap.containsValue(WSDL2Constants.URI_WSDL2_SOAP)) {
wsoap = omFactory
.createOMNamespace(WSDL2Constants.URI_WSDL2_SOAP,
WSDLSerializationUtil.getPrefix(
WSDL2Constants.URI_WSDL2_SOAP, nameSpacesMap));
} else {
wsoap = descriptionElement
.declareNamespace(WSDL2Constants.URI_WSDL2_SOAP, WSDL2Constants.SOAP_PREFIX);
}
if (nameSpacesMap != null && nameSpacesMap.containsValue(WSDL2Constants.URI_WSDL2_HTTP)) {
whttp = omFactory
.createOMNamespace(WSDL2Constants.URI_WSDL2_HTTP,
WSDLSerializationUtil.getPrefix(
WSDL2Constants.URI_WSDL2_HTTP, nameSpacesMap));
} else {
whttp = descriptionElement
.declareNamespace(WSDL2Constants.URI_WSDL2_HTTP, WSDL2Constants.HTTP_PREFIX);
}
if (nameSpacesMap != null && nameSpacesMap.containsValue(WSDL2Constants.URI_WSDL2_EXTENSIONS)) {
wsdlx = omFactory
.createOMNamespace(WSDL2Constants.URI_WSDL2_EXTENSIONS,
WSDLSerializationUtil.getPrefix(
WSDL2Constants.URI_WSDL2_EXTENSIONS, nameSpacesMap));
} else {
wsdlx = descriptionElement.declareNamespace(WSDL2Constants.URI_WSDL2_EXTENSIONS,
WSDL2Constants.WSDL_EXTENTION_PREFIX);
}
// Add the documentation element
String description;
OMElement documentationElement =
omFactory.createOMElement(WSDL2Constants.DOCUMENTATION, wsdl);
if ((description = axisService.getDocumentation()) != null) {
OMText omText;
if (description.indexOf(WSDLSerializationUtil.CDATA_START) > -1) {
description = description.replaceFirst(WSDLSerializationUtil.CDATA_START_REGEX, "");
description = description.replaceFirst(WSDLSerializationUtil.CDATA_END_REGEX, "");
omText = omFactory.createOMText(description, XMLStreamConstants.CDATA);
} else {
omText = omFactory.createOMText(description);
}
documentationElement.addChild(omText);
descriptionElement.addChild(documentationElement);
}
// Add types element
OMElement typesElement = omFactory.createOMElement(WSDL2Constants.TYPES_LOCAL_NALE, wsdl);
axisService.populateSchemaMappings();
ArrayList schemas = axisService.getSchema();
for (int i = 0; i < schemas.size(); i++) {
StringWriter writer = new StringWriter();
XmlSchema schema = axisService.getSchema(i);
if (!org.apache.axis2.namespace.Constants.URI_2001_SCHEMA_XSD
.equals(schema.getTargetNamespace())) {
schema.write(writer);
String schemaString = writer.toString();
if (!"".equals(schemaString)) {
try {
typesElement.addChild(
XMLUtils.toOM(new ByteArrayInputStream(schemaString.getBytes())));
} catch (XMLStreamException e) {
throw AxisFault.makeFault(e);
}
}
}
}
descriptionElement.addChild(typesElement);
Parameter parameter = axisService.getParameter(WSDL2Constants.INTERFACE_LOCAL_NAME);
String interfaceName;
if (parameter != null) {
interfaceName = (String) parameter.getValue();
} else {
interfaceName = WSDL2Constants.DEFAULT_INTERFACE_NAME;
}
// Add the interface element
descriptionElement.addChild(getInterfaceElement(wsdl, tns, wsdlx, omFactory, interfaceName));
boolean disableREST = false;
Parameter disableRESTParameter =
axisService.getParameter(Constants.Configuration.DISABLE_REST);
if (disableRESTParameter != null &&
JavaUtils.isTrueExplicitly(disableRESTParameter.getValue())) {
disableREST = true;
}
// Check whether the axisService has any endpoints. If they exists serialize them else
// generate default endpoint elements.
Set bindings = new HashSet();
Map endpointMap = axisService.getEndpoints();
if (endpointMap != null && endpointMap.size() > 0) {
String[] eprs = axisService.getEPRs();
if (eprs == null) {
eprs = new String[]{axisService.getName()};
}
OMElement serviceElement = getServiceElement(wsdl, tns, omFactory, interfaceName);
Iterator iterator = endpointMap.values().iterator();
while (iterator.hasNext()) {
// With the new binding hierachy in place we need to do some extra checking here.
// If a service has both http and https listners up we should show two separate eprs
// If the service was deployed with a WSDL and it had two endpoints for http and
// https then we have two endpoints populated so we should serialize them instead
// of updating the endpoints.
AxisEndpoint axisEndpoint = (AxisEndpoint) iterator.next();
AxisBinding axisBinding = axisEndpoint.getBinding();
String type = axisBinding.getType();
if (WSDL2Constants.URI_WSDL2_HTTP.equals(type)) {
if (disableREST) {
continue;
}
}
bindings.add(axisBinding);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?