users@glassfish.java.net

_at_WebServiceProvider deployment failure related to WSDL <xs:include ...>

From: Mark Hansen <marklists_at_javector.com>
Date: Thu, 15 Mar 2007 07:49:42 -0400

I'm using v2 b33. Getting an error when deploying a
@WebServiceProvider. Error is being caused by the WSDL referenced by
the wsdlLocation. The WSDL uses <xs:include ../> elements to integrated
with XSDs that have been publised on the net. So schemaLocations are of
the form "http://soabook.com/ ...". But, GlassFish seems to be
interpreting the schemaLocations as being relative to the wsdlLocation
on the local machine; thereby generating FileNotFoundException.

This same example deployed under v1 (the first release of the Java EE SDK).

Below are code snippets. Any help would be appreciated.

-- Mark



@WebServiceProvider(serviceName = "RequestOrderService",
    portName="RequestOrderPort",
    targetNamespace = "http://www.example.com/req",
    wsdlLocation="WEB-INF/wsdl/RequestOrder.wsdl")
@ServiceMode(Service.Mode.PAYLOAD)
public class RequestOrderEndpoint implements Provider<Source> {


WSDL
========
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://www.example.com/req"
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:oms="http://www.example.com/oms"
xmlns:req="http://www.example.com/req"
  xmlns:faults="http://www.example.com/faults">
  <wsdl:types>
    <xs:schema targetNamespace="http://www.example.com/oms">
      <xs:include
schemaLocation="http://soabook.com/example/oms/orders.xsd"/>
    </xs:schema>
    <xs:schema targetNamespace="http://www.example.com/faults">
      <xs:include
schemaLocation="http://soabook.com/example/faults/faults.xsd"
      />
    </xs:schema>
    <xs:schema elementFormDefault="qualified"
      targetNamespace="http://www.example.com/req">
      <xs:import namespace="http://www.example.com/oms"/>
      <xs:element name="requestOrder">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="CUST_NO">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="10"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="PURCH_ORD_NO" minOccurs="0">
              <xs:simpleType>
                <xs:restriction base="xs:string">
                  <xs:maxLength value="35"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="ccard" type="oms:BUSOBJ_CCARD" minOccurs="0"/>
            <xs:element name="item" type="oms:BUSOBJ_ITEM"
            maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="requestOrderResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="oms:Order"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
  </wsdl:types>
  <wsdl:message name="request">
    <wsdl:part name="parameters" element="req:requestOrder"/>
  </wsdl:message>
  <wsdl:message name="response">
    <wsdl:part name="parameters" element="req:requestOrderResponse"/>
  </wsdl:message>
  <wsdl:message name="inputFault">
    <wsdl:part name="parameters"
element="faults:inputMessageValidationFault"/>
  </wsdl:message>
  <wsdl:portType name="RequestOrderPort">
    <wsdl:operation name="requestOrder">
      <wsdl:input message="req:request"/>
      <wsdl:output message="req:response"/>
      <wsdl:fault name="requestOrderInputFault" message="req:inputFault"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="RequestOrderSOAPBinding" type="req:RequestOrderPort">
    <soap:binding style="document"
      transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="requestOrder">
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
      <wsdl:fault name="requestOrderInputFault">
        <soap:fault name="requestOrderInputFault"/>
      </wsdl:fault>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="RequestOrderService">
    <wsdl:port name="RequestOrderPort"
binding="req:RequestOrderSOAPBinding">
      <soap:address location="not yet determined"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>


SERVER.LOG
==================
[#|2007-03-14T22:30:23.974-0400|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=13;_ThreadName=httpWorkerThread-4848-0;_RequestID=2ed3c657-a410-4246-a045-64a9a27b2511;|WebModule[/chap07-endpoint-provider-endpoint-1.0]PWC1396:

Servlet /chap07-endpoint-provider-endpoint-1.0 threw load() exception
javax.servlet.ServletException
    at
com.sun.enterprise.webservice.JAXWSServlet.doInit(JAXWSServlet.java:237)
    at com.sun.enterprise.webservice.JAXWSServlet.init(JAXWSServlet.java:99)
    at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1165)

<snip/>

Caused by: com.sun.xml.ws.server.ServerRtException: exception during
WSDL parsing:
file:/C:/bin/glassfish-v2-b33/domains/domain1/applications/j2ee-modules/chap07-endpoint-provider-endpoint-1.0/WEB-INF/wsdl/http:/soabook.com/example/oms/orders.xsd
    at com.sun.xml.ws.server.SDDocumentImpl.create(SDDocumentImpl.java:149)
    at
com.sun.xml.ws.server.EndpointFactory.categoriseMetadata(EndpointFactory.java:419)
    at
com.sun.xml.ws.server.EndpointFactory.createEndpoint(EndpointFactory.java:146)
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:420)
    at com.sun.xml.ws.api.server.WSEndpoint.create(WSEndpoint.java:463)
    at
com.sun.enterprise.webservice.JAXWSServlet.registerEndpoint(JAXWSServlet.java:331)
    at
com.sun.enterprise.webservice.JAXWSServlet.doInit(JAXWSServlet.java:230)
    ... 75 more
Caused by: java.io.FileNotFoundException:
C:\bin\glassfish-v2-b33\domains\domain1\applications\j2ee-modules\chap07-endpoint-provider-endpoint-1.0\WEB-INF\wsdl\http:\soabook.com\example\oms\orders.xsd

(The filename, directory name, or volume label syntax is incorrect)