Access external RPC/Enc-Webservice from JBI-Environment - HOW? HELP!!

Hi,

I do need to access a web service from the jbi environment

- without using any bpel

- which is RPC-Encoded style (jax-ws doesn't read the wsdl).

I don't find any tutorial/description, of how to do this!

COULD SOMEONE PLEASE HELP ME?

cheers,

applet5

[303 byte] By [applet5a] at [2007-11-27 1:42:52]
# 1

I know that it can't be that complex that no-one answers.

I also do know that it can't be that easy as I don't get it... and I'ver read JBI/JCP208 three times now and heaps of tutorials.

But I'm really stuck. I just don't get it.

PLEASE: Give me a hint how to do this... Any tutorial how to integrate e.g. google's WS/ amazon's web service/...whatever service will help!

ANY help is appreciated. I'm really desperate to get at least anything working...

Thanks again

applet5a at 2007-7-12 1:00:05 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 2

Actually i didn't understand when you said,

I do need to access a web service from the jbi environment

- without using any bpel

- which is RPC-Encoded style (jax-ws doesn't read the wsdl).

What do you mean when you say you want to access? Do you want a component in the JBI environment to call this webservice? You can use Java EE service engine if you don't want BPEL SE.

I am guessing from what i heard from other developers working with Jax-ws. Since Jax-WS doesn't have good support for something that is not WS Basic profile, it is likely that it has a problem here.

Maybe more clarification on your use case will spur more replies.

-Kiran B

kiran.bhumanaa at 2007-7-12 1:00:05 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 3

Hi Kiran,

I kept my post as short as possible, hoping someone will read those few lines. Describing my problem in detail would likely distract people from reading the post...

What's my situation:

I should code a BC and a SE to make a legacy system available to a JBI Environment.

The BC will use AXIS to access the legacy sytem using the legacy system's non-wsdl-I-conform webservice. The BC therefore should act as a service provider to any other component within the JBI env..

The SE should then use this BC to access the legacy system. As the legacy's webservice only offers 3 services (login/logout/systemcall), this is barely usable for any other service/application within the JBI. Many subservice-operations must be bundled to achieve easiest operations. Therefore should the SE bundle some BC calls in convenience for other components. My SE therefore must act as service consumer and provider. BPEL is no choice, as to much processing logic needs to be involved.

What I don't get:

How do I define my abstract service definition for the BC?

Where do I specify how my NormalizedMessage's XML-part looks alike?

Where do I specify, which operations are available?

I think that, in my case, I don't have the need for a Service Unit Manager, as I won't deploy additional functionality, right?

I simply can't find specifications or a guide of how to implement this. If anyone has a netbeans project for an openESB BC and is willing to send it to me, this would be highly appreciated.

Or otherwise any other help...comments....tutorials I probably haven't found... my email address is applet5[at]web.removethis.de or ICQ 12971115012 (remove last two digits).

Thank you so much Kiran and all others reading/replying...

Applet5

PS: I would really really like to chat or talk to anyone, who has JBI/openESB knowledge. Please send me an email, if you could spare some minutes. If it encourages you, I would consider paying you some eur/$ via PayPal.

Message was edited by:

applet5

applet5a at 2007-7-12 1:00:05 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 4

Hi again,

major issues have been solved by re-reading and re-reading the JBI-Spec carefully.

As to my understanding, abstract definition of services is to be taken literally. there is no wsdl or sthg. like that defining internal and external services and ports/endpoints, right? All definitions are made implicitly within the java-code (i.e. within the component & componentLifeCycle & from additional methods somewhere else)!?!?

operations/services are defined in an extra xml-file, which is not the one defining how to install a BC or SE. Those xml-files defining operations/services are only for SU and SA and will be deployed on BC/SE, right?

My open issue: http://forum.java.sun.com/thread.jspa?threadID=5163622&tstart=0

What happens, if I don't support deployment of SA/SU? Where do I define operations and my xml-payload of the NormalizedMessage?

Thanks for your help!

Applet

PS: I still would like to talk to someone to clarify other, minor issues.... so if you could spare a minute or two....

applet5a at 2007-7-12 1:00:05 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 5

This is what i understood, you want to expose some legacy APIs using a BC and want to provide more functionality on top of that through an SE. Correct me if i got it wrong.

Why is BPEL not a choice for you as an SE? Seems like a good fit for me as per your description. It will orchestrate how you want your 3 services to be part of a bigger process. Still if you would rather choose another SE, what will you choose, a JavaEE SE? or some other SE. Any engine here should be able to do the same thing. I would like to understand your concern when you said, "BPEL

is no choice, as to much processing logic needs to be involved"?

Regarding the other part of your email, "What i don't get"

* I would say define your abstract WSDL as if you are defining an interface in Java. (Assuming your familiarity with Java). your abstract WSDL is not tied to any BC or SE or any other implementation. (Although you should be aware of Basic profile way of defining message contents, for more interoperability). But given where you are, I wouldn't worry about Basic profile for now. Just design your abstract WSDL.

* Don't worry about Normalizedmessages xml part. That is not for the business users to worry about. That is interoperability between the JBI components, engines and BCs. Now if you are writing the components, then you should worry about how to read and write a conformant NM but not about how it looks like.

* Your abstract WSDL defines the "signatures" of your operations. Binding part of your WSDL defines what you are really making available (or exposing).

check these https://blueprints.dev.java.net/bpcatalog/ee5/soa/ to understand a little more. Projects for these blueprints are also available as part of Netbeans. Look in the welcome page of NB editor.

kiran.bhumanaa at 2007-7-12 1:00:05 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 6

After reading your posts again, i think i might have understood it wrong.

Check the java.net for open-jbi-components code for how the BCs and SEs are written to be in conformance with the JBI spec.

you seem to want to write a BC and a SE for a specific few tasks and thats about it. If you don't mind my commenting, to me it seems an awful lot of investment for your return (for the lack of better words). Can you not achieve this by making use of the existing BC (httpBC or some other BC) or SE? I think you should be able to solve it without having to write a BC or SE.

The way i am suggesting to solve this will require you to support deployments.

You seem to think(or want to think) of a BC and an SE hardwired to each other and hence(maybe?) your questions as "where to define operations and payload of NM?"

My idea is more like, based on your requirement, your BC or SE will be a legacyAPPcomponent. say it is your SE. name it legacyAppSE. Now you code the SE as per JBI spec. Then use httpBC and your legacyAppSE to expose your services. You deploy SU of WSDLs and legacyAppSE files and the jbi.xmls. When a request comes to httpBC for login service, it will send the message to legacyAppSE because of your SU deployment. Then legacyApp SE does something and returns.

kiran B.

kiran.bhumanaa at 2007-7-12 1:00:05 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...
# 7

Hi Kiran,

THANK YOU SO MUCH FOR THIS ANSWER!!!

I'm really desperate as this task is part of my master-thesis...and I've already time-issues here.

Your idea as stated at the bottom of your last post is pretty similar to my imagination of how the transactions should work. I抣l sum it up again:

Some service accesses http-bc with the request to (eg) login. This is then transmitted via the NMR to my myLegacyApplSE. This accepts the requests, performs some logic and requests myLegacyApplBC to login given the transformed parameters. The BC than routes this request to the legacy application using axis, as the legacy抯 webservice is non-wsdl-I-conform and therefore not usable with existing BCs. (If you want to give it a try, the WSDL-file is accessable here: http://www.file-upload.net/download-251262/wsdl.wsdl.html (I blanked the port, email me for the URL if needed)).The legacy system sends the result as a part of an inOut MEP back to the myLegacyApplBC, who sends the result unchanged to myLegacyApplSE. This again applies some transformations and returns the result to the client using http-bc (again as a inout-MEP).

Why I don抰 use BPEL?

The logic which needs to be involved within the myLegacyApplSE is mainly concerned with extracting information out of html-pages. The legacy抯 bloody webservice (sorry) sends (amongst others) html-blocks as its answer, and I don抰 think that it is possible to extract parameters out of this html-response-block.

About the hardwired BC+SE:

Yes, in my case I do think that those to components are nearly hardwired to each other. And this causes the question of where to define the content of my messageExchange抯 xml-payload. If I want to connect both of my components, do I need to deploy a SU for http-bc as for them to exchange messages with each other? As to my knowledge, this is not needed as finding endpoints could be done within the code using getEndpoint(..,..) somewhere within the ComponentLifeCycle-class.

Abstract WSDL

Ok, this perfectly makes sense. But where do I put the WSDL file such that other engines could access myLegacyApplSE ?or better know how to access myLegacyApplSE?

I guess that the term 揳bsctract WSDL?defines types, messages, operations an port types, right? Endpoints are generated within the componentLifeCycle-implementing class. But where do I put the WSDL? And: Does this WSDL then define which (java-language) methods are provided by my SE (I抎 say: yes).

As an alternative I'm beginning to think of simply writing an EJBean which makes use of AXIS and is deployed to the Application Server which also runs openESB. JBI probably could use JEE-SE (BC?) to access webservices provided by this EJB and provide those to the JBI-Env.

What do you think?!

Thanks again a thousand times for your patience and answers,

applet5

applet5a at 2007-7-12 1:00:05 > top of Java-index,Enterprise & Remote Computing,Enterprise Technologies...