[
https://issues.apache.org/jira/browse/AXIS-2699?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sameer Pokarna updated AXIS-2699:
---------------------------------
Attachment: MultipleEnumeration.java
Java file for which WSDL file can be generated using Java2WSDL.
> Missing schema for http://util.java
> -----------------------------------
>
> Key: AXIS-2699
> URL: https://issues.apache.org/jira/browse/AXIS-2699
> Project: Axis
> Issue Type: Bug
> Components: WSDL processing
> Affects Versions: 1.3
> Reporter: Sameer Pokarna
> Attachments: MultipleEnumeration.java,
> MultipleEnumerationIncorrect.wsdl
>
>
> We use Axis 1.3 for generating WSDL for Java classes. I found a bug while
> generating a WSDL for the enclosed class (MultipleEnumeration.java).
> When I compile this class and run this against the Java2WSDL utility, I get
> the wsdl as attached (MultipleEnumerationIncorrect.wsdl). I am also attaching
> a correct WSDL after making the fix.
> Bug:
> The WSDL is not using xsd:anyType for one of the Enumeration fields. The
> schema for http://util.java is missing too leading to an incorrect WSDL.
> The bug seems to be in the org.apache.axis.wsdl.fromJava.Types class, private
> boolean makeTypeElement(Class type, QName qName, Element containingElement)
> method.
> The original code looks like this:
> // If we've already got this type (because it's a native type or
> // because we've already written it), just add the type="" attribute
> // (if appropriate) and return.
> if (!addToTypesList(qName) && !anonymous) {
> if (containingElement != null) {
> containingElement.setAttribute("type", getQNameString(qName));
> }
> return true;
> }
> // look up the serializer in the TypeMappingRegistry
> SerializerFactory factory;
> factory = (SerializerFactory) tm.getSerializer(type, qName);
>
> // If no factory is found, use the BeanSerializerFactory
> // if applicable, otherwise issue errors and treat as an anyType
> if (factory == null) {
> if (isEnumClass(type)) {
> factory = new EnumSerializerFactory(type, qName);
> } else if (isBeanCompatible(type, true)) {
> factory = new BeanSerializerFactory(type, qName);
> } else {
> return false;
> }
> }
>
> // factory is not null
> Serializer ser = (Serializer)
> factory.getSerializerAs(Constants.AXIS_SAX);
>
> // if we can't get a serializer, that is bad.
> if (ser == null) {
> throw new AxisFault(Messages.getMessage("NoSerializer00",
> type.getName()));
> }
>
> Element typeEl;
>
> try {
> typeEl = ser.writeSchema(type, this);
> } catch (Exception e) {
> throw AxisFault.makeFault(e);
> }
>
> Here, please note that the types list is constructed before checking if a
> factory exists for the type. For some types which result in anyType, the
> subsequent code returns false, and the schema for it is not written.
> Fix:
> The fix for this is to add the type to the typed list only if the factory is
> found for the class under consideration, and before the schema is written.
> So, the code will look like this.
> // look up the serializer in the TypeMappingRegistry
> SerializerFactory factory;
> factory = (SerializerFactory) tm.getSerializer(type, qName);
>
> // If no factory is found, use the BeanSerializerFactory
> // if applicable, otherwise issue errors and treat as an anyType
> if (factory == null) {
> if (isEnumClass(type)) {
> factory = new EnumSerializerFactory(type, qName);
> } else if (isBeanCompatible(type, true)) {
> factory = new BeanSerializerFactory(type, qName);
> } else {
> return false;
> }
> }
>
> // If we've already got this type (because it's a native type or
> // because we've already written it), just add the type="" attribute
> // (if appropriate) and return.
> if (!addToTypesList(qName) && !anonymous) {
> if (containingElement != null) {
> containingElement.setAttribute("type", getQNameString(qName));
> }
>
> return true;
> }
>
> // factory is not null
> Serializer ser = (Serializer)
> factory.getSerializerAs(Constants.AXIS_SAX);
>
> // if we can't get a serializer, that is bad.
> if (ser == null) {
> throw new AxisFault(Messages.getMessage("NoSerializer00",
> type.getName()));
> }
>
> Element typeEl;
>
> try {
> typeEl = ser.writeSchema(type, this);
> } catch (Exception e) {
> throw AxisFault.makeFault(e);
> }
>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]