servicedescriptionimpl.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,278 行 · 第 1/5 页
JAVA
1,278 行
if (seic.getWsdlDefinition() != null) {
//set the sdimpl from the SEI composite
this.wsdlURL = seic.getWsdlURL();
this.wsdlWrapper =
new WSDL4JWrapper(seic.getWsdlURL(), seic.getWsdlDefinition());
} else if (composite.getWsdlDefinition() != null) {
//set the sdimpl from the impl. class composite
this.wsdlURL = composite.getWsdlURL();
this.wsdlWrapper = new WSDL4JWrapper(composite.getWsdlURL(),
composite.getWsdlDefinition());
}
} catch (WSDLException e) {
throw ExceptionFactory.makeWebServiceException(
Messages.getMessage("wsdlException", e.getMessage()), e);
}
}
//Deprecate this code block when MDQ is fully integrated
} else if (wsdlURL != null) {
try {
this.wsdlWrapper = new WSDL4JWrapper(this.wsdlURL);
}
catch (FileNotFoundException e) {
throw ExceptionFactory.makeWebServiceException(
Messages.getMessage("wsdlNotFoundErr", e.getMessage()), e);
}
catch (UnknownHostException e) {
throw ExceptionFactory.makeWebServiceException(
Messages.getMessage("unknownHost", e.getMessage()), e);
}
catch (ConnectException e) {
throw ExceptionFactory.makeWebServiceException(
Messages.getMessage("connectionRefused", e.getMessage()), e);
}
catch(IOException e) {
throw ExceptionFactory.makeWebServiceException(Messages.getMessage("urlStream", e.getMessage()), e);
}
catch (WSDLException e) {
throw ExceptionFactory.makeWebServiceException(
Messages.getMessage("wsdlException", e.getMessage()), e);
}
}
}
// TODO: Remove these and replace with appropraite get* methods for WSDL information
/* (non-Javadoc)
* @see org.apache.axis2.jaxws.description.ServiceDescriptionWSDL#getWSDLWrapper()
*/
public WSDLWrapper getWSDLWrapper() {
return wsdlWrapper;
}
/* (non-Javadoc)
* @see org.apache.axis2.jaxws.description.ServiceDescriptionWSDL#getWSDLLocation()
*/
public URL getWSDLLocation() {
return wsdlURL;
}
/**
* TODO: This method should be replaced with specific methods for getWSDLGenerated... similar to
* how getWsdlWrapper should be replaced.
*/
public WSDLWrapper getGeneratedWsdlWrapper() {
return this.generatedWsdlWrapper;
}
void setAxisConfigContext(ConfigurationContext config) {
this.configContext = config;
}
/* (non-Javadoc)
* @see org.apache.axis2.jaxws.description.ServiceDescription#getAxisConfigContext()
*/
public ConfigurationContext getAxisConfigContext() {
if (configContext == null) {
configContext = getClientConfigurationFactory().getClientConfigurationContext();
}
return configContext;
}
ClientConfigurationFactory getClientConfigurationFactory() {
if (clientConfigFactory == null) {
clientConfigFactory = DescriptionFactory.createClientConfigurationFactory();
}
return clientConfigFactory;
}
/* (non-Javadoc)
* @see org.apache.axis2.jaxws.description.ServiceDescription#getServiceClient(javax.xml.namespace.QName)
*/
public ServiceClient getServiceClient(QName portQName) {
ServiceClient returnServiceClient = null;
if (!DescriptionUtils.isEmpty(portQName)) {
EndpointDescription endpointDesc = getEndpointDescription(portQName);
if (endpointDesc != null) {
returnServiceClient = endpointDesc.getServiceClient();
}
else {
// Couldn't find Endpoint Description for port QName
if (log.isDebugEnabled()) {
log.debug("Could not find portQName: " + portQName
+ " under ServiceDescription: " + toString());
}
}
}
else {
// PortQName is empty
if (log.isDebugEnabled()) {
log.debug("PortQName agrument is invalid; it can not be null or an empty string: " + portQName);
}
}
return returnServiceClient;
}
/* (non-Javadoc)
* @see org.apache.axis2.jaxws.description.ServiceDescription#getServiceQName()
*/
public QName getServiceQName() {
//It is assumed that this will always be set in the constructor rather than
//built up from the class or DBC
return serviceQName;
}
void setServiceQName(QName theName) {
serviceQName = theName;
}
public boolean isServerSide() {
return isServerSide;
}
HashMap<String, DescriptionBuilderComposite> getDBCMap() {
return dbcMap;
}
void setGeneratedWsdlWrapper(WSDL4JWrapper wrapper) {
this.generatedWsdlWrapper = wrapper;
}
void setWsdlWrapper(WSDL4JWrapper wrapper) {
this.wsdlWrapper = wrapper;
}
private void validateDBCLIntegrity() {
//First, check the integrity of this input composite
//and retrieve
//the composite that represents this impl
//TODO: Currently, we are calling this method on the DBC. However, the DBC
//will eventually need access to to the whole DBC map to do proper validation.
//We don't want to pass the map of DBC's back into a single DBC.
//So, for starters, this method and all the privates that it calls should be
// moved to here. At some point, we should consider using a new class that we
//can implement scenarios of, like validateServiceImpl implements validator
try {
validateIntegrity();
}
catch (Exception ex) {
if (log.isDebugEnabled()) {
log.debug("Validation phase 1 failure: " + ex.toString(), ex);
log.debug("Failing composite: " + composite.toString());
}
throw ExceptionFactory.makeWebServiceException("Validation Exception " + ex, ex);
}
}
/*
* Validates the integrity of an impl. class. This should not be called directly for an SEI composite
*/
void validateIntegrity() {
//TODO: Consider moving this to a utils area, do we really want a public
// method that checks integrity...possibly
//In General, this integrity checker should do gross level checking
//It should not be setting spec-defined default values, but can look
//at things like empty strings or null values
//TODO: This method will validate the integrity of this object. Basically, if
//consumer set this up improperly, then we should fail fast, should consider placing
//this method in a utils class within the 'description' package
//Verify that, if this implements a strongly typed provider interface, that it
// also contain a WebServiceProvider annotation per JAXWS Sec. 5.1
Iterator<String> iter =
composite.getInterfacesList().iterator();
// Remember if we've validated the Provider interface. Later we'll make sure that if we have an
// WebServiceProvider annotation, we found a valid interface here.
boolean providerInterfaceValid = false;
while (iter.hasNext()) {
String interfaceString = iter.next();
if (interfaceString.equals(MDQConstants.PROVIDER_SOURCE)
|| interfaceString.equals(MDQConstants.PROVIDER_SOAP)
|| interfaceString.equals(MDQConstants.PROVIDER_DATASOURCE)
|| interfaceString.equals(MDQConstants.PROVIDER_STRING)) {
providerInterfaceValid = true;
//This is a provider based endpoint, make sure the annotation exists
if (composite.getWebServiceProviderAnnot() == null) {
// TODO: RAS/NLS
throw ExceptionFactory.makeWebServiceException(
"Validation error: This is a Provider based endpoint that does not contain a WebServiceProvider annotation. Provider class: " +
composite.getClassName());
}
}
}
//Verify that WebService and WebServiceProvider are not both specified
//per JAXWS - Sec. 7.7
if (composite.getWebServiceAnnot() != null &&
composite.getWebServiceProviderAnnot() != null) {
// TODO: RAS/NLS
throw ExceptionFactory.makeWebServiceException(
"Validation error: WebService annotation and WebServiceProvider annotation cannot coexist. Implementation class: " +
composite.getClassName());
}
if (composite.getWebServiceProviderAnnot() != null) {
if (!providerInterfaceValid) {
// TODO: RAS/NLS
throw ExceptionFactory.makeWebServiceException(
"Validation error: This is a Provider that does not specify a valid Provider interface. Implementation class: " +
composite.getClassName());
}
// There must be a public default constructor per JAXWS - Sec 5.1
if (!validateDefaultConstructor()) {
// TODO: RAS/NLS
throw ExceptionFactory.makeWebServiceException(
"Validation error: Provider must have a public default constructor. Implementation class: " +
composite.getClassName());
}
// There must be an invoke method per JAXWS - Sec 5.1.1
if (!validateInvokeMethod()) {
// TODO: RAS/NLS
throw ExceptionFactory.makeWebServiceException(
"Validation error: Provider must have a public invoke method. Implementation class: " +
composite.getClassName());
}
//If ServiceMode annotation specifies 'payload', then make sure that it is not typed with
// SOAPMessage or DataSource
validateProviderInterfaces();
} else if (composite.getWebServiceAnnot() != null) {
if (composite.getServiceModeAnnot() != null) {
// TODO: RAS/NLS
throw ExceptionFactory.makeWebServiceException(
"Validation error: ServiceMode annotation can only be specified for WebServiceProvider. Implementation class: " +
composite.getClassName());
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?