axisservicebasedmultilanguageemitter.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 1,546 行 · 第 1/5 页
JAVA
1,546 行
String packageName = codeGenConfiguration.getPackageName();
String localPart = makeJavaClassName(axisService.getName());
return packageName + "." + localPart + MESSAGE_RECEIVER_SUFFIX;
}
/**
* @return fully qualified skeleton name
*/
protected String getFullyQualifiedSkeletonName() {
String packageName = codeGenConfiguration.getPackageName();
String localPart = makeJavaClassName(axisService.getName());
String skeltonName;
if (this.codeGenConfiguration.isBackwordCompatibilityMode()) {
skeltonName = packageName + "." + makeJavaClassName(axisService.getBindingName()) +
SKELETON_CLASS_SUFFIX_BACK;
} else {
skeltonName = packageName + "." + localPart + SKELETON_CLASS_SUFFIX;
}
return skeltonName;
}
/**
* @return fully qualified skeleton interface name
*/
protected String getFullyQualifiedSkeletonInterfaceName() {
String packageName = codeGenConfiguration.getPackageName();
String localPart = makeJavaClassName(axisService.getName());
String skeltonInterfaceName;
if (this.codeGenConfiguration.isBackwordCompatibilityMode()) {
skeltonInterfaceName = packageName + "." +
makeJavaClassName(axisService.getEndpointName()) +
SKELETON_INTERFACE_SUFFIX_BACK;
} else {
skeltonInterfaceName = packageName + "." + localPart + SKELETON_INTERFACE_SUFFIX;
}
return skeltonInterfaceName;
}
/**
* Emits the skeleton
*
* @throws CodeGenerationException
*/
public void emitSkeleton() throws CodeGenerationException {
try {
allServiceInfoHolder = new HashMap();
Map originalMap = getNewCopy(this.mapper.getAllMappedNames());
// we are going to generate following files seperately per service
for (Iterator axisServicesIter = this.axisServices.iterator();
axisServicesIter.hasNext();) {
// create a new hash map for each service
this.infoHolder = new HashMap();
this.axisService = (AxisService) axisServicesIter.next();
this.axisBinding =
axisService.getEndpoint(axisService.getEndpointName()).getBinding();
// see the comment at updateMapperClassnames for details and reasons for
// calling this method
if (mapper.isObjectMappingPresent()) {
copyMap(originalMap, this.mapper.getAllMappedNames());
updateMapperForMessageReceiver();
} else {
copyToFaultMap();
}
//handle faults
generateAndPopulateFaultNames();
//
if (codeGenConfiguration.isServerSideInterface()) {
//write skeletonInterface
writeSkeletonInterface();
}
// write skeleton only if the used has
// asked for the deployment descriptor in the interface mode
// else write it anyway :)
if (codeGenConfiguration.isServerSideInterface()) {
if (codeGenConfiguration.isGenerateDeployementDescriptor()) {
writeSkeleton();
}
} else {
writeSkeleton();
}
if (!codeGenConfiguration.isSkipMessageReceiver()) {
// write a MessageReceiver for this particular service.
writeMessageReceiver();
}
// write the Exceptions
writeExceptions();
if (!codeGenConfiguration.isSkipWriteWSDLs()) {
//for the server side codegen
//we need to serialize the WSDL's
writeWSDLFiles();
}
// save the info holder with the service
allServiceInfoHolder.put(this.axisService.getName(),this.infoHolder);
}
// save back type map
if (this.mapper.isObjectMappingPresent()) {
copyMap(originalMap, this.mapper.getAllMappedNames());
}
// write service xml
// if asked
if (codeGenConfiguration.isGenerateDeployementDescriptor()) {
writeServiceXml();
}
if (!codeGenConfiguration.isSkipBuildXML()) {
//write the ant build
//we skip this for the flattened case
if (!codeGenConfiguration.isFlattenFiles()) {
writeAntBuild();
}
}
} catch (CodeGenerationException cgExp) {
throw cgExp;
} catch (Exception e) {
throw new CodeGenerationException(e);
}
}
/**
* Write out the WSDL files (and the schemas) writing the WSDL (and schemas) is somewhat special
* so we cannot follow the usual pattern of using the class writer
*/
protected void writeWSDLFiles() {
//first modify the schema names (and locations) so that
//they have unique (flattened) names and the schema locations
//are adjusted to suit it
axisService.setCustomSchemaNamePrefix("");//prefix with nothing
axisService.setCustomSchemaNameSuffix(".xsd");//suffix with .xsd - the file name extension
//force the mappings to be reconstructed
axisService.setSchemaLocationsAdjusted(false);
Map changedMap = axisService.populateSchemaMappings();
// add these two attribute to use the user defined wsdl to use.
try {
axisService.addParameter(new Parameter("useOriginalwsdl", "true"));
axisService.addParameter(new Parameter("modifyUserWSDLPortAddress", "false"));
} catch (AxisFault axisFault) {
// there is no way to get this excpetion while in codegeneration
}
//now get the schema list and write it out
SchemaWriter schemaWriter = new SchemaWriter(
codeGenConfiguration.isFlattenFiles() ?
getOutputDirectory(codeGenConfiguration.getOutputLocation(), null) :
getOutputDirectory(codeGenConfiguration.getOutputLocation(),
codeGenConfiguration.getResourceLocation()));
// first write all the schmas.
// then use the changedMap got above to adjust the names.
Map schemaMappings = axisService.getSchemaMappingTable();
Iterator keys = schemaMappings.keySet().iterator();
while (keys.hasNext()) {
Object key = keys.next();
schemaWriter.writeSchema(
(XmlSchema) schemaMappings.get(key),
(String) key
);
}
//switch between the correct writer
if (CommandLineOptionConstants.WSDL2JavaConstants.WSDL_VERSION_2.
equals(codeGenConfiguration.getWSDLVersion())) {
// Woden cannot serialize the WSDL as yet, so lets serialize the axisService for now.
WSDL20Writer wsdl20Writer = new WSDL20Writer(
codeGenConfiguration.isFlattenFiles() ?
getOutputDirectory(codeGenConfiguration.getOutputLocation(), null) :
getOutputDirectory(codeGenConfiguration.getOutputLocation(),
codeGenConfiguration.getResourceLocation()));
wsdl20Writer.writeWSDL(axisService);
} else {
// here we are going to write the wsdl and its imports
// with out using the axis service.
WSDL11Writer wsdl11Writer = new WSDL11Writer(
codeGenConfiguration.isFlattenFiles() ?
getOutputDirectory(codeGenConfiguration.getOutputLocation(), null) :
getOutputDirectory(codeGenConfiguration.getOutputLocation(),
codeGenConfiguration.getResourceLocation()));
wsdl11Writer.writeWSDL(axisService,
codeGenConfiguration.getWsdlDefinition(),
changedMap);
}
}
/**
* Utility method to copy the faults to the correct map
*/
protected void copyToFaultMap() {
Map classNameMap = mapper.getAllMappedNames();
Iterator keys = classNameMap.keySet().iterator();
while (keys.hasNext()) {
Object key = keys.next();
instantiatableMessageClassNames.put(key,
classNameMap.get(key));
}
}
/**
* Change the fault classnames to go with the package and stub
*/
protected void updateFaultPackageForStub() {
Iterator faultClassNameKeys = fullyQualifiedFaultClassNameMap.keySet().iterator();
while (faultClassNameKeys.hasNext()) {
Object key = faultClassNameKeys.next();
String className = (String) fullyQualifiedFaultClassNameMap.get(key);
//append the skelton name
String fullyQualifiedStubName = getFullyQualifiedStubName();
fullyQualifiedFaultClassNameMap.put(key, codeGenConfiguration.getPackageName() + "."
+ className);
}
}
/**
* Writes the message receiver
*
* @throws Exception
*/
protected void writeMessageReceiver() throws Exception {
//loop through the meps and generate code for each mep
Iterator it = mepToClassMap.keySet().iterator();
while (it.hasNext()) {
String mep = (String) it.next();
Document classModel = createDocumentForMessageReceiver(
mep,
codeGenConfiguration.isServerSideInterface());
debugLogDocument("Document for message receiver (mep=" + mep +
"):", classModel);
//write the class only if any methods are found
if (Boolean.TRUE.equals(infoHolder.get(mep))) {
MessageReceiverWriter writer =
new MessageReceiverWriter(
codeGenConfiguration.isFlattenFiles() ?
getOutputDirectory(
codeGenConfiguration.getOutputLocation(),
null) :
getOutputDirectory(
codeGenConfiguration.getOutputLocation(),
codeGenConfiguration.getSourceLocation()),
codeGenConfiguration.getOutputLanguage());
writer.setOverride(codeGenConfiguration.isOverride());
writeFile(classModel, writer);
}
}
}
/**
* Creates the XML model for the message receiver
*
* @param mep
* @param isServerSideInterface
* @return DOM Document
*/
protected Document createDocumentForMessageReceiver(String mep, boolean isServerSideInterface) {
Document doc = getEmptyDocument();
Element rootElement = doc.createElement("interface");
addAttribute(doc, "package", codeGenConfiguration.getPackageName(), rootElement);
String localPart = makeJavaClassName(axisService.getName());
addAttribute(doc, "name", localPart + mepToSuffixMap.get(mep), rootElement);
//add backwordcompatibility attribute
addAttribute(doc, "isbackcompatible",
String.valueOf(codeGenConfiguration.isBackwordCompatibilityMode()),
rootElement);
if (this.codeGenConfiguration.isBackwordCompatibilityMode()) {
addAttribute(doc, "skeletonname",
makeJavaClassName(axisService.getBindingName()) +
SKELETON_CLASS_SUFFIX_BACK,
rootElement);
if (isServerSideInterface) {
addAttribute(doc, "skeletonInterfaceName", makeJavaClassName(
axisService.getEndpointName()) + SKELETON_INTERFACE_SUFFIX_BACK,
rootElement);
} else {
addAttribute(doc, "skeletonInterfaceName", makeJavaClassName(
axisService.getBindingName()) + SKELETON_CLASS_SUFFIX_BACK,
rootElement);
}
} else {
addAttribute(doc, "skeletonname", localPart + SKELETON_CLASS_SUFFIX, rootElement);
if (isServerSideInterface) {
addAttribute(doc, "skeletonInterfaceName", localPart + SKELETON_INTERFACE_SUFFIX,
rootElement);
} else {
addAttribute(doc, "skeletonInterfa
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?