endpointreference.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 742 行 · 第 1/2 页
JAVA
742 行
/*
* 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.addressing;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.util.StAXUtils;
import org.apache.axiom.om.util.UUIDGenerator;
import org.apache.axis2.AxisFault;
import org.apache.axis2.util.ObjectStateUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* Class EndpointReference
* This class models the WS-A EndpointReferenceType. But this can be used without any WS-A handlers as well
* Since the models for this in Submission and Final versions are different, lets make this to comply with
* WS-A Final version. So any information found with WS-A submission will be "pumped" in to this model.
*/
public class EndpointReference implements Serializable {
private static final long serialVersionUID = 5278892171162372439L;
private static final Log log = LogFactory.getLog(EndpointReference.class);
private static final String myClassName = "EndpointReference";
/**
* An ID which can be used to correlate operations on an instance of
* this object in the log files
*/
private String logCorrelationIDString = null;
/**
* <EndpointReference>
* <Address>xs:anyURI</Address>
* <ReferenceParameters>xs:any*</ReferenceParameters>
* <MetaData>xs:any*</MetaData>
* <!-- In addition to this, EPR can contain any number of OMElements -->
* </EndpointReference>
*/
private String name;
private String address;
private ArrayList addressAttributes;
private ArrayList metaData;
private ArrayList metaDataAttributes;
private Map referenceParameters;
private ArrayList extensibleElements;
private ArrayList attributes;
/**
* @param address
*/
public EndpointReference(String address) {
this.address = address;
}
/**
* @param omElement
*/
public void addReferenceParameter(OMElement omElement) {
if (omElement == null) {
return;
}
if (referenceParameters == null) {
referenceParameters = new HashMap();
}
referenceParameters.put(omElement.getQName(), omElement);
}
/**
* @param qname
* @param value - the text of the OMElement. Remember that this is a convenient method for the user,
* which has limited capability. If you want more power use @See EndpointReference#addReferenceParameter(OMElement)
*/
public void addReferenceParameter(QName qname, String value) {
if (qname == null) {
return;
}
OMElement omElement = OMAbstractFactory.getOMFactory().createOMElement(qname, null);
omElement.setText(value);
addReferenceParameter(omElement);
}
/**
* This will return a Map of reference parameters with QName as the key and an OMElement
* as the value
*
* @return - map of the reference parameters, where the key is the QName of the reference parameter
* and the value is an OMElement
*/
public Map getAllReferenceParameters() {
return referenceParameters;
}
public String getAddress() {
return address;
}
/**
* @param address - xs:anyURI
*/
public void setAddress(String address) {
this.address = address;
}
public ArrayList getAddressAttributes() {
return addressAttributes;
}
public void setAddressAttributes(ArrayList al) {
addressAttributes = al;
}
public ArrayList getMetadataAttributes() {
return metaDataAttributes;
}
public void setMetadataAttributes(ArrayList al) {
metaDataAttributes = al;
}
/**
* hasAnonymousAddress
*
* @return true if address is 'Anonymous URI'
*/
public boolean hasAnonymousAddress() {
boolean result = (AddressingConstants.Final.WSA_ANONYMOUS_URL.equals(address) ||
AddressingConstants.Submission.WSA_ANONYMOUS_URL.equals(address) ||
//The following is added to give WS-RM anonymous a semantics to indicate
//that any response messages should be sent synchronously, using the
//transports back channel, as opposed to asynchronously. No other
//semantics normally associated with WS-Addressing anonymous values should
//be assumed, by it's presence here.
(address != null && address.startsWith(
"http://docs.oasis-open.org/ws-rx/wsmc/200702/anonymous?id=")));
if (log.isTraceEnabled()) {
log.trace("hasAnonymousAddress: " + address + " is Anonymous: " + result);
}
return result;
}
/**
* hasNoneAddress
*
* @return true if the address is the 'None URI' from the final addressing spec.
*/
public boolean hasNoneAddress() {
boolean result = AddressingConstants.Final.WSA_NONE_URI.equals(address);
if (log.isTraceEnabled()) {
log.trace("hasNoneAddress: " + address + " is None: " + result);
}
return result;
}
/**
* @param localName
* @param ns
* @param value
*/
public void addAttribute(String localName, OMNamespace ns, String value) {
if (attributes == null) {
attributes = new ArrayList();
}
attributes.add(OMAbstractFactory.getOMFactory().createOMAttribute(localName, ns, value));
}
public ArrayList getAttributes() {
return attributes;
}
/**
* @param omAttribute
*/
public void addAttribute(OMAttribute omAttribute) {
if (attributes == null) {
attributes = new ArrayList();
}
attributes.add(omAttribute);
}
public ArrayList getExtensibleElements() {
return extensibleElements;
}
/**
* {any}
*
* @param extensibleElements
*/
public void setExtensibleElements(ArrayList extensibleElements) {
this.extensibleElements = extensibleElements;
}
public void addExtensibleElement(OMElement extensibleElement) {
if (extensibleElement != null) {
if (this.extensibleElements == null) {
this.extensibleElements = new ArrayList();
}
this.extensibleElements.add(extensibleElement);
}
}
public ArrayList getMetaData() {
return metaData;
}
public void addMetaData(OMNode metaData) {
if (metaData != null) {
if (this.metaData == null) {
this.metaData = new ArrayList();
}
this.metaData.add(metaData);
}
}
/**
* @deprecated
*/
public String getName() {
return name;
}
/**
* @param name
* @deprecated
*/
public void setName(String name) {
this.name = name;
}
/**
* Set a Map with QName as the key and an OMElement
* as the value
*
* @param referenceParameters
*/
public void setReferenceParameters(Map referenceParameters) {
this.referenceParameters = referenceParameters;
}
/*
* (non-Javadoc)
* @see java.lang.Object#toString()
*/
public String toString() {
StringBuffer buffer = new StringBuffer("Address: " + address);
if (addressAttributes != null) {
buffer.append(", Address Attributes: ").append(addressAttributes);
}
if (metaData != null) {
buffer.append(", Metadata: ").append(metaData);
}
if (referenceParameters != null) {
buffer.append(", Reference Parameters: ").append(referenceParameters);
}
if (extensibleElements != null) {
buffer.append(", Extensibility elements: ").append(extensibleElements);
}
if (attributes != null) {
buffer.append(", Attributes: ").append(attributes);
}
return buffer.toString();
}
/**
* @param eprOMElement
* @deprecated use {@link EndpointReferenceHelper#fromOM(OMElement)} instead.
*/
public void fromOM(OMElement eprOMElement) {
OMElement addressElement = eprOMElement.getFirstChildWithName(new QName("Address"));
setAddress(addressElement.getText());
Iterator allAddrAttributes = addressElement.getAllAttributes();
if (addressAttributes == null) {
addressAttributes = new ArrayList();
}
while (allAddrAttributes.hasNext()) {
OMAttribute attribute = (OMAttribute) allAddrAttributes.next();
addressAttributes.add(attribute);
}
OMElement refParamElement = eprOMElement
.getFirstChildWithName(new QName(AddressingConstants.EPR_REFERENCE_PARAMETERS));
if (refParamElement != null) {
Iterator refParams = refParamElement.getChildElements();
while (refParams.hasNext()) {
OMElement omElement = (OMElement) refParams.next();
addReferenceParameter(omElement);
}
}
OMElement metaDataElement = eprOMElement
.getFirstChildWithName(new QName(AddressingConstants.Final.WSA_METADATA));
if (metaDataElement != null) {
Iterator children = metaDataElement.getChildren();
while (children.hasNext()) {
OMNode omNode = (OMNode) children.next();
addMetaData(omNode);
}
}
setName(eprOMElement.getLocalName());
Iterator allAttributes = eprOMElement.getAllAttributes();
if (attributes == null) {
attributes = new ArrayList();
}
while (allAttributes.hasNext()) {
OMAttribute attribute = (OMAttribute) allAttributes.next();
attributes.add(attribute);
}
Iterator childElements = eprOMElement.getChildElements();
while (childElements.hasNext()) {
OMElement eprChildElement = (OMElement) childElements.next();
String localName = eprChildElement.getLocalName();
if (!localName.equals("Address") &&
!localName.equals(AddressingConstants.EPR_REFERENCE_PARAMETERS) &&
!localName.equals(AddressingConstants.Final.WSA_METADATA)) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?