Hi,

I was about to send a note to explain the changes. :-)

It's actually one step to fix the problem reported in TUSCANY-1814. One of the findings is that WSDL4J agressively load inline schemas and follow the import/include directives into DOM and Schema extension. As a consequence, it consumes a lot memory is the XSDs are big. No code consumes the WSDL4J Schema and we'll load the schema again using Apache XmlSchema. In the changes, I disable the WSDL Schema extension deserialization by replacing the Schema extension deserializer with UnknowExtensibilityElement deserializer.

I don't know why the full build doesn't catch the ?wsdl issue. Let me take a look and I think the fix might be as simple as disabling the Schema extension serializer.

Thanks,
Raymond

----- Original Message ----- From: "Simon Laws" <[EMAIL PROTECTED]>
To: "tuscany-dev" <tuscany-dev@ws.apache.org>
Sent: Monday, October 01, 2007 1:49 AM
Subject: Re: WS Binding ?WSDL problem


On 10/1/07, Simon Laws <[EMAIL PROTECTED]> wrote:

With the latest trunk I'm getting the following from
\binding-ws-axis2\src\test\java\org\apache\tuscany\sca\binding\ws\axis2\itests\QuestionMarkWSDLTestCase.java

HTTP ERROR: 500

javax.wsdl.extensions.UnknownExtensibilityElement

 incompatible with javax.wsdl.extensions.schema.Schema

RequestURI=/services/HelloWorldWebService
Caused by:

java.lang.ClassCastException: javax.wsdl.extensions.UnknownExtensibilityElement incompatible with javax.wsdl.extensions.schema.Schema
at com.ibm.wsdl.extensions.schema.SchemaSerializer.marshall

(Unknown Source)
at com.ibm.wsdl.xml.WSDLWriterImpl.printExtensibilityElements(Unknown Source)
at com.ibm.wsdl.xml.WSDLWriterImpl.printTypes(Unknown Source)
at com.ibm.wsdl.xml.WSDLWriterImpl.printDefinition
(Unknown Source)

at com.ibm.wsdl.xml.WSDLWriterImpl.writeWSDL(Unknown Source)
at com.ibm.wsdl.xml.WSDLWriterImpl.writeWSDL(Unknown Source)
at org.apache.axis2.description.AxisService.printDefinitionObject(
AxisService.java:920)

at org.apache.axis2.description.AxisService.printUserWSDL(AxisService.java:934) at org.apache.axis2.description.AxisService.printWSDL(AxisService.java:1056) at org.apache.tuscany.sca.binding.ws.axis2.TuscanyListingAgent.processListService

(TuscanyListingAgent.java:140)
at org.apache.tuscany.sca.binding.ws.axis2.Axis2ServiceServlet.doGet(Axis2ServiceServlet.java:255)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service

(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
at org.mortbay.jetty.servlet.SessionHandler.handle

(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
at org.mortbay.jetty.Server.handle

(Server.java:285)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:821)
at org.mortbay.jetty.HttpParser.parseNext

(HttpParser.java:513)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:208)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
at org.mortbay.io.nio.SelectChannelEndPoint.run
(SelectChannelEndPoint.java
:368)
at org.apache.tuscany.sca.core.work.Jsr237Work.run(Jsr237Work.java:61)
at org.apache.tuscany.sca.core.work.ThreadPoolWorkManager$DecoratingWork.run(ThreadPoolWorkManager.java:205)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask
(ThreadPoolExecutor.java:665)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
at java.lang.Thread.run(Thread.java
:801)

*Powered by Jetty:// <http://jetty.mortbay.org/>*

I've made some changes locally in binding-ws-axis2 although nothing to do
with reading wsdl so am trying to work out if this is to do with my changes
or not. Anyone else seeing it?

Simon


It seems to be related to the memory optimization changes that went in with
r580611. If I re-enable the schema extension for WSDL4J then the problem
goes away.

   public WSDLModelResolver(Contribution contribution,
ModelFactoryExtensionPoint modelFactories) {
       this.contribution = contribution;

       this.wsdlFactory = modelFactories.getFactory(WSDLFactory.class);
       this.wsdl4jFactory = modelFactories.getFactory(
javax.wsdl.factory.WSDLFactory.class);
       this.contributionFactory = modelFactories.getFactory (
ContributionFactory.class);

       wsdlExtensionRegistry =
this.wsdl4jFactory.newPopulatedExtensionRegistry();
       // REVIEW: [rfeng] Disable the schema extension for WSDL4J to avoid
aggressive loading
/*
       ExtensionDeserializer deserializer = new
UnknownExtensionDeserializer();
       for (QName schema : XSD_QNAME_LIST) {
           wsdlExtensionRegistry.registerDeserializer(Types.class, schema,
deserializer);
       }
*/
   }

There seems to be quite a lot of changes for this fix. Raymond, could you
give us a quick run through of what the changes do?

Regards

Simon



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to