Well, finally I got the solution .... just for knowledge I will briefly
share the solution with the community, soon I will update the tutorial that
I have written for the EMF model generation, adding the binding
implementation also.

A bit of introduction first.

The WCS 1.0.0 schema for the DomainSubset part requires a structure like the
following:

    <wcs:domainSubset>
        <wcs:spatialSubset>
            <gml:Envelope srsName="EPSG:32633">
                <gml:pos>347649.93086859107 5176214.082539256</gml:pos>
                <gml:pos>370725.976428591 5196961.352859256</gml:pos>
            </gml:Envelope>
            <gml:Grid dimension="2" srsName="EPSG:4326">
                <gml:limits>
                    <gml:GridEnvelope>
                        <gml:low>0 0</gml:low>
                        <gml:high>545 490</gml:high>
                    </gml:GridEnvelope>
                </gml:limits>
            </gml:Grid>
        </wcs:spatialSubset>
    </wcs:domainSubset>

As you can notice the domainSubset and the spatialSubset nodes belong to the
"wcs" namespace, while the Envelope and Grid to the "gml" one instead.
That means that the EnvelopeBinding and GridBinding have to be implemented
into some "gt-gml" (just a dummy name) module and the spatialSubsetBinding
and domainSubsetBinding have to be implemented into some "gt-wcs" package
instead.

At this point we have several ways to do that, but particular attention has
to be put on how we implement the WCSConfiguration and GMLConfiguration for
both the WCS and GML binding packages (more details later).

Method 1: if you would like the Parser to automatically populate the
objects, than you must leave the EnvelopeBinding and the GridBinding
respectively return the EMF Objects (EObjects) EnvelopeType and GridType.

Method 2: if you would like to allow the EnvelopeBinding returning for
instance a geotools GeneralEnvelope (or a JTS Envelope or whatelse), than
you MUST say to the WCS spatialSubsetBinding and to the domainSubsetBinding
how to handle such case. You have here several ways too. One would be to
write some specific geotools Converters from EnvelopeType to whatelse;
another one, easier, would be to manually rewrite te "parse" methods of the
spatialSubsetBinding and domainSubsetBinding in order to handle the
GeneralEnvelope parsing. The latter is for sure the best path to follow ...
but you have to pay particular attention on how you write the
WCSConfiguration binding file, infact you have to explicitly register both
the spatialSubsetBinding and the domainSubsetBinding implementations as
represented below.

        bindings.put(WCS.DomainSubsetType, new DomainSubsetTypeBinding());
        bindings.put(WCS.SpatialSubsetType, new SpatialSubsetTypeBinding());

Cheers,
                Alessio.

On Thu, Jul 10, 2008 at 4:18 PM, Alessio Fabiani <[EMAIL PROTECTED]>
wrote:

> Hi Gabriel,
>
> thanks for the response ... I have already inspected this possibility, but
> does not seem to solve the problem ... I also tryied several
> WCSConfiguration and GMLConfiguration combinations ... but I got no
> successful result.
> The only thing I noticed is that the AbstractComplexEMFBinding superclass
> fails on the setProperty method trying to instantiate a
> geotools.util.Converter from the expected EnvelopeType class to jts.Envelope
> (or ReferencedEnvelope) one, since no one exists ... the only thing I cannot
> really figure out is why that works for gt-GML3 module and not for mine
> since they are almost equal !!!
>
> On Thu, Jul 10, 2008 at 4:06 PM, Gabriel Roldán <[EMAIL PROTECTED]>
> wrote:
>
>> I guess if the binding declares it returns ReferencedEnvelope.class in
>> getType() it should be respected...
>>
>> like in class EnvelopeTypeBinding extends AbstractComplexTypeBinding{
>>
>>  public Class getType() {
>>        return ReferencedEnvelope.class;
>>    }
>>
>> }
>>
>> though not sure that is the solution actually...
>>
>> Gabriel
>>
>> On Thursday 10 July 2008 03:43:30 pm Alessio Fabiani wrote:
>> > Hi all,
>> >
>> > I'm trying to create a new binding for the GML EnvelopeType as a JTS
>> > Envelope, since I couldn't use geotools gml2/3 EMF models due to some
>> > specific Elements defined only for WCS 1.0.0.
>> > Nevertheless I followed the implementation of the existing gt-GML3
>> module
>> > EvnelopeTypeBinding, returning a ReferencedEnvelope object as result of
>> the
>> > EnvelopeTypeBinding parsing.
>> >
>> > Now ... all seems working fine until I try to parse a WCS 1.0.0
>> > SpatialSubsetType ... here I get an exception like the following:
>> >
>> > org.vfny.geoserver.wcs.WcsException: Parsing failed, the xml request is
>> > most probably not compliant to the wcs schema
>> >     at
>> org.geoserver.wcs.xml.v1_0_0.WcsXmlReader.read(WcsXmlReader.java:50)
>> >     at
>> >
>> org.geoserver.wcs.xml.GetCoverageXmlParserTest.testBasic(GetCoverageXmlPars
>> >erTest.java:86) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> > Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>> at
>> > sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at
>> > java.lang.reflect.Method.invoke(Unknown Source)
>> >     at junit.framework.TestCase.runTest(TestCase.java:164)
>> >     at junit.framework.TestCase.runBare(TestCase.java:130)
>> >     at junit.framework.TestResult$1.protect(TestResult.java:106)
>> >     at junit.framework.TestResult.runProtected(TestResult.java:124)
>> >     at junit.framework.TestResult.run(TestResult.java:109)
>> >     at junit.framework.TestCase.run(TestCase.java:120)
>> >     at junit.framework.TestSuite.runTest(TestSuite.java:230)
>> >     at junit.framework.TestSuite.run(TestSuite.java:225)
>> >     at
>> >
>> org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3
>> >TestReference.java:130) at
>> >
>> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
>> >38) at
>> >
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR
>> >unner.java:460) at
>> >
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR
>> >unner.java:673) at
>> >
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner
>> >.java:386) at
>> >
>> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunne
>> >r.java:196) Caused by: java.lang.RuntimeException: Parsing failed for
>> > spatialSubset: java.lang.RuntimeException: Unable to set property:
>> Envelope
>> > for eobject: { 
>> > http://www.opengis.net/wcs}SpatialSubsetType<http://www.opengis.net/wcs%7DSpatialSubsetType>
>> >     at org.geotools.xml.impl.ParseExecutor.visit(ParseExecutor.java:152)
>> >     at
>> >
>> org.geotools.xml.impl.BindingWalker$BindingExecutionChain.execute(BindingWa
>> >lker.java:208) at
>> > org.geotools.xml.impl.BindingWalker.walk(BindingWalker.java:174) at
>> >
>> org.geotools.xml.impl.ElementHandlerImpl.endElement(ElementHandlerImpl.java
>> >:222) at
>> > org.geotools.xml.impl.ParserHandler.endElement(ParserHandler.java:582)
>> >     at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown
>> > Source)
>> >     at org.apache.xerces.impl.xs.XMLSchemaValidator.endElement(Unknown
>> > Source)
>> >     at
>> > org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown
>> > Source)
>> >     at
>> >
>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispat
>> >cher.dispatch(Unknown Source)
>> >     at
>> >
>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
>> > Source)
>> >     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
>> Source)
>> >     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
>> Source)
>> >     at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>> >     at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
>> >     at org.geotools.xml.Parser.parse(Parser.java:180)
>> >     at org.geotools.xml.Parser.parse(Parser.java:158)
>> >     at
>> org.geoserver.wcs.xml.v1_0_0.WcsXmlReader.read(WcsXmlReader.java:48)
>> >     ... 19 more
>> > Caused by: java.lang.RuntimeException: Unable to set property: Envelope
>> for
>> > eobject: 
>> > {http://www.opengis.net/wcs}SpatialSubsetType<http://www.opengis.net/wcs%7DSpatialSubsetType>
>> >     at
>> >
>> org.geotools.xml.AbstractComplexEMFBinding.setProperty(AbstractComplexEMFBi
>> >nding.java:271) at
>> >
>> org.geotools.xml.AbstractComplexEMFBinding.setProperties(AbstractComplexEMF
>> >Binding.java:202) at
>> >
>> org.geotools.xml.AbstractComplexEMFBinding.parse(AbstractComplexEMFBinding.
>> >java:143) at
>> > org.geotools.xml.impl.ParseExecutor.visit(ParseExecutor.java:143) ... 35
>> > more
>> > Caused by: java.lang.ClassCastException: The feature 'envelope's type
>> > 'EnvelopeType' does not permit a value of type
>> > 'org.geotools.geometry.jts.ReferencedEnvelope'
>> >     at
>> >
>> org.eclipse.emf.ecore.impl.EStructuralFeatureImpl$BasicFeatureMapEntry.vali
>> >date(EStructuralFeatureImpl.java:2843) at
>> >
>> org.eclipse.emf.ecore.util.FeatureMapUtil.createEntry(FeatureMapUtil.java:1
>> >46) at
>> >
>> org.eclipse.emf.ecore.util.BasicFeatureMap.createEntry(BasicFeatureMap.java
>> >:94) at
>> >
>> org.eclipse.emf.ecore.util.BasicFeatureMap.addAll(BasicFeatureMap.java:1253
>> >) at
>> >
>> org.eclipse.emf.ecore.util.FeatureMapUtil$FeatureEList.addAll(FeatureMapUti
>> >l.java:656) at org.geotools.xml.EMFUtils.add(EMFUtils.java:93)
>> >     at
>> >
>> org.geotools.xml.AbstractComplexEMFBinding.setProperty(AbstractComplexEMFBi
>> >nding.java:230) ... 38 more
>> >
>> > And if I return an EvnelopeType all works well ...
>> >
>> > any ideas? am I missing something? Do I have to build a geotools
>> converter
>> > or something like that?
>> >
>> > Any help kindly appreciated.
>> >
>> > Cheers,
>> >             Alessio.
>>
>>
>>
>> -------------------------------------------------------------------------
>> Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
>> Studies have shown that voting for your favorite open source project,
>> along with a healthy diet, reduces your potential for chronic lameness
>> and boredom. Vote Now at http://www.sourceforge.net/community/cca08
>> _______________________________________________
>> Geoserver-devel mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/geoserver-devel
>>
>
>
>
> --
> -------------------------------------------------------
> Eng. Alessio Fabiani
> Vice-President /CTO GeoSolutions S.A.S.
> Via Carignoni 51
> 55041 Camaiore (LU)
> Italy
>
> phone: +39 0584983027
> fax: +39 0584983027
> mob: +39 349 8227000
>
>
> http://www.geo-solutions.it
>
> -------------------------------------------------------
>



-- 
-------------------------------------------------------
Eng. Alessio Fabiani
Vice-President /CTO GeoSolutions S.A.S.
Via Carignoni 51
55041 Camaiore (LU)
Italy

phone: +39 0584983027
fax: +39 0584983027
mob: +39 349 8227000


http://www.geo-solutions.it

-------------------------------------------------------
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Geoserver-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Reply via email to