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]