Hi.

So far there was no answer to my questions. So I am wondering whether my first email contained just too much questions for a single email. Should I split the problems I encountered into several emails so that they can be handled with more focus on each specific problem?

Best regards,
Johannes


Johannes Echterhoff schrieb:
Hello.

I would like to use muse for my scenario but run into problems just when I wanted to do more than the tutorial. Before describing the problem, I would like to outline my scenario shortly so that you get an understanding of what I want to achieve. Did I already mention that I am a newbie to muse. :-)

I have to warn you: this email is quite large - so better get a new cup of coffee before reading.

The scenario is as follows: Sensors generate observations which are pushed to the service (so the service may act like a notification broker). The observations are published on one topic while sensor status messages (created by the service) are published on another. Clients can subscribe for both types of messages. For the observation topic subscribers can use message content filters that allow at least xpath expressions but can also be more specific filters (encoded in XML).

I would like to extend the notification producer interface with some additional operations (DescribeSensor, GetCapabilities). Depending on the use case, even the RegisterPublisher and Notify operation from WSN could be realized by that service. If so, the RegisterPublisher request would make use of the extensibility mechanism defined for that operation to send also the sensor description in XML.

Feedback on how muse could / should be used to handle this scenario would be most appreciated!


Ok, let me explain what I accomplished so far. First of all, I tried to create a wsdl description for the new service. As I am not too familiar with using wsdl defined web services, I may have made silly mistakes - if so please tell me what I did wrong. That wsdl used imports to reference definitions from other wsdl files (the WS-Notification and -Resource specs). For my custom operations I needed to import schema which defined the request / response messages and types used in these operations.

After some trials with wsdlmerge I got this exception message:

C:\muse-test\wsdlmerge_test>wsdlmerge.bat -uri http://www.opengis.net/sas/1.0.0 -address http://localhost:8080/52nSAS/sas -output SASmerged.wsdl -verbose SAS.ws dl WS-BaseNotification-1_3.wsdl WS-BrokeredNotification-1_3.wsdl WS-Resource-1_2
.wsdl WS-ResourceProperties-1_2.wsdl

SEVERE: [ID = 'WsdlMergeFailed'] wsdlmerge encountered an error. Use -verbose to
see more detailed information.

An exception was caught: null

The exception generated the following stacktrace:

java.lang.NullPointerException
at org.apache.muse.tools.generator.util.DefinitionInfo.createOutput(Defi
nitionInfo.java:198)
at org.apache.muse.tools.generator.util.DefinitionInfo.createOperation(D
efinitionInfo.java:173)
at org.apache.muse.tools.generator.util.DefinitionInfo.addOperation(Defi
nitionInfo.java:308)
at org.apache.muse.tools.generator.WsdlMerge.copyOperations(WsdlMerge.ja
va:340)
at org.apache.muse.tools.generator.WsdlMerge.merge(WsdlMerge.java:219) at org.apache.muse.tools.generator.WsdlMerge.run(WsdlMerge.java:141) at org.apache.muse.tools.generator.WsdlMerge.main(WsdlMerge.java:113)

The wsdl is attached (SAS.wsdl).


I also created my own wsdl (see attached wsdl: SASallinone.wsdl) which contains all the message definitions and which imports all required schema (quite a bunch). Then I run wsdl2java. That worked, but the result is not exactly what I expected (though that may be due to my insufficient knowledge of muse). Also, there was a warning that I do not understand because the WS-ResourceProperties-1_2.xsd is in the directory where the wsdl file is and the schema import looks ok to me:

C:\muse-test\wsdl>wsdl2java.bat -j2ee mini -wsdl SASallinone.wsdl -output test -verbose

WARNING: [ID = 'NoWSRPSchema'] No WS-RP schema found.

C:\muse-test\wsdl>wsdlmerge


However, code has been generated; the classes (excluding the interfaces) look like this:

(MyCapability1)

package org.oasis_open.docs.wsn.br_2;

import org.apache.muse.ws.addressing.EndpointReference;
import org.apache.muse.core.AbstractCapability;
import java.util.Date;
import org.w3c.dom.Element;

public class MyCapability extends AbstractCapability implements IMyCapability { public Element registerPublisher(EndpointReference PublisherReference, Element[] Topic, boolean Demand, Date InitialTerminationTime) throws Exception {
       //TODO implement registerPublisher
throw new RuntimeException("Unimplemented Method: registerPublisher");
   }
}


(MyCapability2)

package net.opengis.www.sas._1.0.0;

import org.apache.muse.core.AbstractCapability;
import org.w3c.dom.Element;

public class MyCapability extends AbstractCapability implements IMyCapability {
   public Element getCapabilities() throws Exception    {
       //TODO implement getCapabilities
throw new RuntimeException("Unimplemented Method: getCapabilities");
   }
   public Element describeSensor(Element SensorID) throws Exception    {
       //TODO implement describeSensor
throw new RuntimeException("Unimplemented Method: describeSensor");
   }
}


There are several questions that I have:

   * concerning the generated sources:
         o The getCapabilities method (in MyCapability2) should expect
           some XML input - do you have any idea why the generated
           method only has a return parameter? Is that due to the fact
           that I used doc/literal?
         o The describeSensor method (in MyCapability2) looks ok - if
           the SensorID Element is actually the complete DescribeSensor
           request XML document which would be send by a client in the
           SOAP body. Looking at the registerPublisher method, it seems
           like wsdl2java removes the top-level XML fragment from the
           request (in this case the RegisterPublisher XML element) and
           lists all elements contained in that element instead (even
           converting them if they are of simple type).
         o Neither of the capability classes extends
           AbstractWsResourceCapability - is that due to the fact that
           I did not extend the resource type with my own elements
           (i.e., it just lists elements from WSN, WSRF and MUWS)?
         o The registerPublisher method (in MyCapability1) takes the
           elements contained in a usual RegisterPublisher request,
           i.e. as they are listed in the schema from OASIS, as
           parameters. As I said earlier I would like to make use of
           the extension mechanism for that operation. Do I therefore
           have to modify the schema before generating source code or
           is there some way to retrieve the pure request body via muse?
         o In the SASallinone.wsdl I added the Notify operation from
           the NotificationConsumer interface to the services binding
           and port type.
   * in general:
         o According to the SubscriptionManager.wsdl that is contained
           in the generated folders (WebContent/WEB-INF/classes/wsdl)
           there will be one subscription manager that will be
           referenced in all Subscribe request responses. So will each
           subscription reference the same manager? Will a Renew or
           Destroy request for a certain Subscription be differentiated
           from requests to other Subscriptions via some parameters
           added by muse to the subscription endpoint?
         o How could we implement a RegisterPublisherManager in muse?
           Would we just have to add another service binding to the
           wsdl before generating source code? The operations of that
           manager would be quite similar to those of the
           SubscriptionManager, could we profit from that?

Please help me getting started.

Thanks.

Johannes
------------------------------------------------------------------------

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



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

Reply via email to