wsdl20toaxisservicebuilder.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,128 行 · 第 1/4 页
JAVA
1,128 行
.getInterfaceOperations();
for (int i = 0; i < interfaceOperations.length; i++) {
axisService.addOperation(populateOperations(interfaceOperations[i]));
operationNames.add(interfaceOperations[i].getName());
}
Interface[] extendedInterfaces = serviceInterface.getExtendedInterfaces();
for (int i = 0; i < extendedInterfaces.length; i++) {
Interface extendedInterface = extendedInterfaces[i];
processInterface(extendedInterface);
}
}
private AxisOperation populateOperations(InterfaceOperation operation) throws AxisFault {
QName opName = operation.getName();
// Copy Name Attribute
AxisOperation axisOperation = axisService.getOperation(opName);
if (axisOperation == null) {
URI pattern = operation.getMessageExchangePattern();
String MEP;
if (pattern == null) {
MEP = WSDL20DefaultValueHolder.getDefaultValue(WSDL2Constants.ATTR_WSOAP_MEP);
} else {
MEP = pattern.toString();
}
if(!isServerSide){
// If in the client, need to toggle in-out to out-in etc.
if(WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)){
MEP = WSDL2Constants.MEP_URI_OUT_IN;
}
if(WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP)){
MEP = WSDL2Constants.MEP_URI_OUT_ONLY;
}
if(WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP)){
MEP = WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN;
}
}
axisOperation = AxisOperationFactory.getOperationDescription(MEP);
axisOperation.setName(opName);
}
URI[] operationStyle = operation.getStyle();
if (operationStyle != null && operationStyle.length > 0) {
Parameter opStyleParameter = new Parameter();
opStyleParameter.setName(WSDL2Constants.OPERATION_STYLE);
opStyleParameter.setValue(operationStyle);
axisOperation.addParameter(opStyleParameter);
}
addDocumentation(axisOperation, operation.toElement());
// assuming the style of the operations of WSDL 2.0 is always document, for the time being :)
// The following can be used to capture the wsdlx:safe attribute
InterfaceOperationExtensionsImpl interfaceOperationExtensions;
try {
interfaceOperationExtensions = (InterfaceOperationExtensionsImpl) operation
.getComponentExtensionsForNamespace(
new URI(WSDL2Constants.URI_WSDL2_EXTENSIONS));
} catch (URISyntaxException e) {
throw new AxisFault("WSDL2 extensions not defined for this operation");
}
if (interfaceOperationExtensions != null) {
Parameter parameter = new Parameter(WSDL2Constants.ATTR_WSDLX_SAFE, new Boolean(
interfaceOperationExtensions.isSafety()));
axisOperation.addParameter(parameter);
}
InterfaceMessageReference[] interfaceMessageReferences = operation
.getInterfaceMessageReferences();
for (int i = 0; i < interfaceMessageReferences.length; i++) {
InterfaceMessageReference messageReference = interfaceMessageReferences[i];
if (messageReference.getMessageLabel().equals(
MessageLabel.IN)) {
// Its an input message
if (isServerSide) {
createAxisMessage(axisOperation, messageReference,
WSDLConstants.MESSAGE_LABEL_IN_VALUE);
} else {
createAxisMessage(axisOperation, messageReference,
WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
}
} else if (messageReference.getMessageLabel().equals(
MessageLabel.OUT)) {
if (isServerSide) {
createAxisMessage(axisOperation, messageReference,
WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
} else {
createAxisMessage(axisOperation, messageReference,
WSDLConstants.MESSAGE_LABEL_IN_VALUE);
}
}
}
// add operation level faults
InterfaceFaultReference[] faults = operation.getInterfaceFaultReferences();
for (int i = 0; i < faults.length; i++) {
AxisMessage faultMessage = new AxisMessage();
InterfaceFaultReference interfaceFaultReference = faults[i];
faultMessage.setDirection(interfaceFaultReference.getDirection().toString());
InterfaceFault interfaceFault = interfaceFaultReference.getInterfaceFault();
faultMessage.setElementQName(interfaceFault.getElementDeclaration().getName());
faultMessage.setName(interfaceFault.getName().getLocalPart());
axisOperation.setFaultMessages(faultMessage);
}
return axisOperation;
}
private void createAxisMessage(AxisOperation axisOperation,
InterfaceMessageReference messageReference, String messageLabel)
throws AxisFault {
AxisMessage message = axisOperation
.getMessage(messageLabel);
String messageContentModelName = messageReference.getMessageContentModel();
QName elementQName = null;
if (WSDL2Constants.NMTOKEN_ELEMENT.equals(messageContentModelName)) {
elementQName = messageReference.getElementDeclaration().getName();
} else if (WSDL2Constants.NMTOKEN_ANY.equals(messageContentModelName)) {
elementQName = Constants.XSD_ANY;
} else
if (WSDL2Constants.NMTOKEN_NONE.equals(messageContentModelName)) {
// nothing to do here keep the message element as null
} else {
throw new AxisFault("Sorry we do not support " + messageContentModelName +
". We do only support #any, #none and #element as message content models.");
}
message.setElementQName(elementQName);
message.setName(elementQName != null ? elementQName.getLocalPart() : axisOperation.getName().getLocalPart());
axisOperation.addMessage(message, messageLabel);
if(WSDLConstants.MESSAGE_LABEL_IN_VALUE.equals(messageLabel)){
XMLAttr xa = messageReference.toElement().getExtensionAttribute(new QName("http://www.w3.org/2006/05/addressing/wsdl","Action"));
if(xa!=null){
String value = (String)xa.getContent();
if(value != null){
ArrayList al = axisOperation.getWSAMappingList();
if(al == null){
al = new ArrayList();
axisOperation.setWsamappingList(al);
}
al.add(value);
}
}
}else{
XMLAttr xa = messageReference.toElement().getExtensionAttribute(new QName("http://www.w3.org/2006/05/addressing/wsdl","Action"));
if(xa!=null){
String value = (String)xa.getContent();
if(value != null){
axisOperation.setOutputAction(value);
}
}
}
// populate this map so that this can be used in SOAPBody based dispatching
if (elementQName != null) {
axisService
.addMessageElementQNameToOperationMapping(elementQName, axisOperation);
}
}
private Description readInTheWSDLFile(String wsdlURI) throws WSDLException {
WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
// This turns on WSDL validation which is set off by default.
// reader.setFeature(WSDLReader.FEATURE_VALIDATION, true);
Description description1 = reader.readWSDL(wsdlURI);
return description1;
}
/**
* Convert woden dependent SOAPHeaderBlock objects to SOAPHeaderMessage objects
*
* @param soapHeaderBlocks - An array of SOAPHeaderBlock objects
* @return ArrayList - An ArrayList of SOAPHeaderMessage objects
*/
private ArrayList createSoapHeaders(SOAPHeaderBlock soapHeaderBlocks[]) {
if (soapHeaderBlocks.length == 0) {
return null;
}
ArrayList soapHeaderMessages = new ArrayList();
for (int i = 0; i < soapHeaderBlocks.length; i++) {
SOAPHeaderBlock soapHeaderBlock = soapHeaderBlocks[i];
ElementDeclaration elementDeclaration = soapHeaderBlock.getElementDeclaration();
if (elementDeclaration != null) {
QName name = elementDeclaration.getName();
SOAPHeaderMessage soapHeaderMessage = new SOAPHeaderMessage();
soapHeaderMessage.setElement(name);
soapHeaderMessage.setRequired(soapHeaderBlock.isRequired().booleanValue());
soapHeaderMessage
.setMustUnderstand(soapHeaderBlock.mustUnderstand().booleanValue());
soapHeaderMessages.add(soapHeaderMessage);
}
}
return soapHeaderMessages;
}
/**
* Convert woden dependent SOAPHeaderBlock objects to SOAPHeaderMessage objects
*
* @param soapModules - An array of SOAPModule objects
* @return ArrayList - An ArrayList of SOAPHeaderMessage objects
*/
private ArrayList createSoapModules(SOAPModule soapModules[]) {
if (soapModules.length == 0) {
return null;
}
ArrayList soapModuleMessages = new ArrayList();
for (int i = 0; i < soapModules.length; i++) {
SOAPModule soapModule = soapModules[i];
SOAPModuleMessage soapModuleMessage = new SOAPModuleMessage();
soapModuleMessage.setUri(soapModule.getRef().toString());
soapModuleMessages.add(soapModuleMessage);
}
return soapModuleMessages;
}
/**
* Convert woden dependent HTTPHeader objects to Header objects
*
* @param httpHeaders - An array of HTTPHeader objects
* @return ArrayList - An ArrayList of Header objects
*/
private ArrayList createHttpHeaders(HTTPHeader httpHeaders[]) {
if (httpHeaders.length == 0) {
return null;
}
ArrayList httpHeaderMessages = new ArrayList();
for (int i = 0; i < httpHeaders.length; i++) {
HTTPHeaderImpl httpHeader = (HTTPHeaderImpl) httpHeaders[i];
HTTPHeaderMessage httpHeaderMessage = new HTTPHeaderMessage();
httpHeaderMessage.setqName(httpHeader.getTypeName());
httpHeaderMessage.setName(httpHeader.getName());
httpHeaderMessage.setRequired(httpHeader.isRequired().booleanValue());
httpHeaderMessages.add(httpHeaderMessage);
}
return httpHeaderMessages;
}
/**
* Adds documentation details to a given AxisDescription.
* The documentation details is extracted from the WSDL element given.
* @param axisDescription - The documentation will be added to this
* @param element - The element that the documentation is extracted from.
*/
private void addDocumentation(AxisDescription axisDescription, DocumentableElement element) {
DocumentationElement[] documentationElements = element.getDocumentationElements();
String documentation = "";
StringBuffer x;
for (int i = 0; i < documentationElements.length; i++) {
DocumentationElement documentationElement = documentationElements[i];
Element content = (Element) documentationElement.getContent();
if (content != null) {
documentation = documentation + DOM2Writer.nodeToString(content.getFirstChild());
}
}
if (!"".equals(documentation)) {
axisDescription.setDocumentation(documentation);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?