Skip to main content

juddiv3 (3.0.4) finding all business/services

3 replies [Last post]
chainerlt
Offline
Joined: 2011-02-21
Points: 0

original post: www.coderanch.com/t/528093/Web-Services/java/juddiv-finding-all-business...
or old.nabble.com/juddiv3-%283.0.4%29-finding-all-business-services-td30975809.html
(go here for better reading quality!)
Hello,

I've been looking for this answer for like a week now. Seems like I've googled everything and everywhere. So here is my story:
I'm using juddi-portal-bundle-3.0.4 at the moment. Juddy behaves happy and works properly, but here comes some problems (or lack of my knowledge) when I wanna get a list of all business and/or services.
So I was learning juddi for a while and now I'm able to manage business/services via soapui (let's say in a manual way) or programmatically (via java). So I've created some temp business with services and here's how they look from UDDIBrowser Portlet:
img: old.nabble.com/file/p30975809/uddibrowserportlet.png

I've read that for searching all business you need to use search name "%", but seems like it is not working for me. I've tried both: programmatically and via soapui:

import org.apache.juddi.ClassUtil;
import org.apache.juddi.api_v3.*;
import org.apache.juddi.v3.client.config.UDDIClientContainer;
import org.apache.juddi.v3.client.transport.Transport;
import org.apache.juddi.v3_service.JUDDIApiPortType;
import org.uddi.api_v3.*;
import org.uddi.v3_service.*;
...
private static UDDISecurityPortType security = null;
private static JUDDIApiPortType juddiApi = null;
private static UDDIPublicationPortType publish = null;
private static UDDIInquiryPortType inquiry = null;

public Tools() throws Exception
{
String clazz = UDDIClientContainer.getUDDIClerkManager(null).getClientConfig()
.getUDDINode("default").getProxyTransport();
Class<?> transportClass = ClassUtil.forName(clazz, Transport.class);
if (transportClass != null)
{
Transport transport = (Transport) transportClass.getConstructor(String.class)
.newInstance("default");
security = transport.getUDDISecurityService();
juddiApi = transport.getJUDDIApiService();
publish = transport.getUDDIPublishService();
inquiry = transport.getUDDIInquiryService();
}
}
...
public BusinessList findBusiness(String searchPattern) throws Exception
{
FindBusiness fb = new FindBusiness();
Name findName = new Name();
findName.setValue(searchPattern);
fb.getName().add(findName);
return inquiry.findBusiness(fb);
}
...
findBusiness("%");

It brings me empty BusinessList. Here's how it looks while debugging:
img: old.nabble.com/file/p30975809/debugFindBusinessWildCard.png

However it works when I search for exact business name, for instance "My Business2":
img: old.nabble.com/file/p30975809/MyBusiness2found.png

Same via soapUI (3.6.1):
Request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:uddi-org:api_v3">
<soapenv:Header/>
<soapenv:Body>
<urn:find_business>
<!--Zero or more repetitions:-->
<urn:name>My Business2</urn:name>
</urn:find_business>
</soapenv:Body>
</soapenv:Envelope>

Respond:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<businessList xmlns:ns10="urn:uddi-org:policy_v3_instanceParms" xmlns:ns9="urn:uddi-org:vs_v3" xmlns:ns8="urn:uddi-org:repl_v3" xmlns:ns7="urn:uddi-org:policy_v3" xmlns:ns6="urn:uddi-org:subr_v3" xmlns:ns5="urn:uddi-org:sub_v3" xmlns:ns4="urn:uddi-org:vscache_v3" xmlns:ns3="urn:uddi-org:custody_v3" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns="urn:uddi-org:api_v3">
<listDescription>
<includeCount>1</includeCount>
<actualCount>1</actualCount>
<listHead>1</listHead>
</listDescription>
<businessInfos>
<businessInfo businessKey="uddi:juddi.apache.org:c0d12d2f-9f8b-4444-acae-675f8f53383f">
<name>My Business2</name>
<serviceInfos>
<serviceInfo businessKey="uddi:juddi.apache.org:c0d12d2f-9f8b-4444-acae-675f8f53383f" serviceKey="uddi:juddi.apache.org:beed92d4-57b5-4974-9e56-17d846f2cca2">
<name>My Service2</name>
</serviceInfo>
</serviceInfos>
</businessInfo>
</businessInfos>
</businessList>
</soap:Body>
</soap:Envelope>

But finds nothing with "%" (or "*" or other 100 symbols and combinations I've tried (including xpath and other expressions):
Request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:uddi-org:api_v3">
<soapenv:Header/>
<soapenv:Body>
<urn:find_business>
<!--Zero or more repetitions:-->
<urn:name>%</urn:name>
</urn:find_business>
</soapenv:Body>
</soapenv:Envelope>]

Respond:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<businessList xmlns:ns10="urn:uddi-org:policy_v3_instanceParms" xmlns:ns9="urn:uddi-org:vs_v3" xmlns:ns8="urn:uddi-org:repl_v3" xmlns:ns7="urn:uddi-org:policy_v3" xmlns:ns6="urn:uddi-org:subr_v3" xmlns:ns5="urn:uddi-org:sub_v3" xmlns:ns4="urn:uddi-org:vscache_v3" xmlns:ns3="urn:uddi-org:custody_v3" xmlns:ns2="http://www.w3.org/2000/09/xmldsig#" xmlns="urn:uddi-org:api_v3">
<listDescription>
<includeCount>0</includeCount>
<actualCount>0</actualCount>
<listHead>0</listHead>
</listDescription>
</businessList>
</soap:Body>
</soap:Envelope>

I've read about MetaMatrix (found smth: here) but seems like it's not free. Also tried using some other libraries, but vainly. However that "%" pattern seems to be very logic and seems like everybody is using this way of finding all objects, but I cannot figure out why it does not work. I really would love to get some answers or suggestions cause I feel stuck :/ . Thanks for reading and taking time.

Reply viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
chainerlt
Offline
Joined: 2011-02-21
Points: 0

Solution:

So the main trick was to set findqualifier "APPROXIMATE_MATCH" or if you would look into its class:

</p>
<p>package org.apache.juddi.query.util;</p>
<p>import org.uddi.api_v3.FindQualifiers;</p>
<p>public class FindQualifiers</p>
<p>{</p>
<p>    ...</p>
<p>    public static final String APPROXIMATE_MATCH = "approximateMatch";</p>
<p>    ...</p>
<p>

And now only adding this approximate match qualifier + name "%" it works.

</p>
<p>        org.uddi.api_v3.Name name = new org.uddi.api_v3.Name();</p>
<p>        name.setValue("%");</p>
<p>        org.uddi.api_v3.FindQualifiers qualifiers = new org.uddi.api_v3.FindQualifiers();</p>
<p>        qualifiers.getFindQualifier().add(org.apache.juddi.query.util.FindQualifiers.APPROXIMATE_MATCH);</p>
<p>        // find business</p>
<p>        org.uddi.api_v3.FindBusiness findBusiness = new org.uddi.api_v3.FindBusiness();</p>
<p>        findBusiness.getName().add(name);</p>
<p>        findBusiness.setFindQualifiers(qualifiers);</p>
<p>        BusinessList lst = inquiry.findBusiness(findBusiness);</p>
<p>

Note:

you can find this class in "juddi-core-3.0.4.jar". Or you can just write String manualy:

</p>
<p>...</p>
<p>qualifiers.getFindQualifier().add("approximateMatch");</p>
<p>...</p>
<p>

making request via soapUI:

</p>
<p><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:uddi-org:api_v3"></p>
<p>   <soapenv:Header/></p>
<p>   <soapenv:Body></p>
<p>      <urn:find_business></p>
<p>         <!--Optional:--></p>
<p>         <urn:findQualifiers></p>
<p>            <!--1 or more repetitions:--></p>
<p>            <urn:findQualifier>approximateMatch</urn:findQualifier></p>
<p>         </urn:findQualifiers></p>
<p>         <!--Zero or more repetitions:--></p>
<p>         <urn:name>%</urn:name></p>
<p>      </urn:find_business></p>
<p>   </soapenv:Body></p>
<p></soapenv:Envelope></p>
<p>

Maybe this will help someone, since I had to find out this by myself and it took few days :/

Good luck!

chainerlt
Offline
Joined: 2011-02-21
Points: 0

Solution:
So the main trick was to set findqualifier "APPROXIMATE_MATCH" or if you would look into its class:
<code>
package org.apache.juddi.query.util;

import org.uddi.api_v3.FindQualifiers;

public class FindQualifiers
{
...
public static final String APPROXIMATE_MATCH = "approximateMatch";
...
</code>
And now only adding this approximate match qualifier + name "%" it works.
<code>
org.uddi.api_v3.Name name = new org.uddi.api_v3.Name();
name.setValue("%");
org.uddi.api_v3.FindQualifiers qualifiers = new org.uddi.api_v3.FindQualifiers();
qualifiers.getFindQualifier().add(org.apache.juddi.query.util.FindQualifiers.APPROXIMATE_MATCH);

// find business
org.uddi.api_v3.FindBusiness findBusiness = new org.uddi.api_v3.FindBusiness();
findBusiness.getName().add(name);
findBusiness.setFindQualifiers(qualifiers);

BusinessList lst = inquiry.findBusiness(findBusiness);
</code>
Note:
you can find this class in "juddi-core-3.0.4.jar". Or you can just write String manualy:
<code>
...
qualifiers.getFindQualifier().add("approximateMatch");
...
</code>

making request via soapUI:
<code>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:uddi-org:api_v3">
<soapenv:Header/>
<soapenv:Body>
<urn:find_business>
<!--Optional:-->
<urn:findQualifiers>
<!--1 or more repetitions:-->
<urn:findQualifier>approximateMatch</urn:findQualifier>
</urn:findQualifiers>
<!--Zero or more repetitions:-->
<urn:name>%</urn:name>
</urn:find_business>
</soapenv:Body>
</soapenv:Envelope>
</code>

Maybe this will help someone, since I had to find out this by myself and it took few days :/
Good luck!

chainerlt
Offline
Joined: 2011-02-21
Points: 0

I also noticed, that search pattern "%" works on juddi 0.9rc4. But juddi 0.9rc4 itself works only on java15. So I tried to run juddiv3 (3.0.4) on java15, but the wildcard "%" still searches zero business/services. Any ideas?