juddiv3已经部署好了~~鼓掌~~~建议尽量就不要动tomcat这个目录了~~使用myeclipse的时候还是使用它自带的tomcat,然后再换个端口吧~~要不两个同时开的时候会冲突(要用到myeclipse编程,对juddiv3进行操作)~~我是把myeclipse自带的tomcat发布端口改了~~方法很简单~~
找到MyEclipse下的server.xml文件,我的路径是C:\Documents and Settings\Administrator\Workspaces\MyEclipse 8.5\.metadata\.me_tcat\conf\server.xml,将其中<connector port="8080".....改成其他端口号,我的是9000~~<server port ="8005">也改成别的号,我的是9005,打开MyEclipse,windows->preferences->Myeclipse->Servers->Integrated Sandbox->MyEclipse Tomcat 6->改成刚才设置的9000~~~~Over~~
其实可以使用soapUI对juddiv3进行服务的发布和查询,但是如果juddiv3不在本机上,我就不知道如何进行查询了,用代码实现的话即使是远程也可以进行操作,只需要修改一下配置文件即可。
首先进行查询服务的编写~~~
1. MyEclipse下新建一个web项目,导入与juddi建立连接所需要的各种jar包,我上传到我的资源里了,可以到那里下载,放上地址http://download.csdn.net/detail/qinyuzhujj/4541404。下图是jar包列表。
2. 下面直接上代码。
package com.test.inquiry;
import com.inquiry.AnalyticWsdl;
import junit.framework.Assert;
import org.apache.juddi.v3.client.config.ClientConfig;
import org.apache.juddi.v3.client.config.UDDIClerkManager;
import org.apache.juddi.v3.client.transport.Transport;
import org.apache.log4j.helpers.Loader;
import org.uddi.v3_service.*;
import org.uddi.api_v3.*;
public class Inquiry {
public void inquiry()
{
try
{
String clazz=UDDIClerkManager.getClientConfig().getUDDINode("default").getProxyTransport();
Class<?> transportClass = Loader.loadClass(clazz);
/*
String clazz=UDDIClerkManager.getClientConfig().getUDDINode("default").getProxyTransport();
Class<?> transportClass=Class.forName(clazz, true, Thread.currentThread().getContextClassLoader());
*/
if(transportClass!=null)
{
//获得authtoken
Transport transport=(Transport)transportClass.newInstance();
UDDISecurityPortType securityService=transport.getUDDISecurityService();
GetAuthToken getauthToken=new GetAuthToken();
getauthToken.setUserID("root"); //用户名
getauthToken.setCred("root"); //密码
AuthToken authtoken=securityService.getAuthToken(getauthToken);
String authinfo=authtoken.getAuthInfo();
System.out.println(authinfo); //输出获取的AuthToken
System.out.println("-----------------查询所有服务-----------------") ;
//获得businessinfo
UDDIInquiryPortType inquiryService=transport.getUDDIInquiryService();
FindBusiness findbusiness=new FindBusiness();
findbusiness.setAuthInfo(authinfo);
Name name1=new Name();
name1.setValue("%"); //查找所有服务采用%
FindQualifiers qualifiers=new FindQualifiers();
qualifiers.getFindQualifier().add(org.apache.juddi.query.util.FindQualifiers.APPROXIMATE_MATCH); //按照APPROXIMATE_MATCH进行过滤
findbusiness.getName().add(name1);
findbusiness.setFindQualifiers(qualifiers);
// BusinessList list=inquiryService.findBusiness(findbusiness);
//获得serviceinfo
FindService findservice=new FindService();
findservice.setAuthInfo(authinfo);
findservice.getName().add(name1);
findservice.setFindQualifiers(qualifiers);
ServiceList list1=inquiryService.findService(findservice);
GetServiceDetail gsd=new GetServiceDetail();
for(ServiceInfo serviceInfo :list1.getServiceInfos().getServiceInfo()){
gsd.getServiceKey().add(serviceInfo.getServiceKey());
System.out.println("--serviceKey:"+serviceInfo.getServiceKey()); //输出获取的serviceKey
String servicekey=serviceInfo.getServiceKey();
//获得businessservice
GetServiceDetail getServiceDetail=new GetServiceDetail();
getServiceDetail.setAuthInfo(authinfo);
getServiceDetail.getServiceKey().add(servicekey);
ServiceDetail serviceDetail=inquiryService.getServiceDetail(getServiceDetail);
BusinessService businessservice=serviceDetail.getBusinessService().get(0);
System.out.println("**serviceName:"+businessservice.getName().get(0).getValue()); //输出serviceName
String bindingkey = businessservice.getBindingTemplates().getBindingTemplate().get(0).getBindingKey();
System.out.println("**bindingKey"+bindingkey);
//获得bindingtemplate中的accesspoint
GetBindingDetail gbd = new GetBindingDetail();
gbd.setAuthInfo(authinfo);
gbd.getBindingKey().add(bindingkey);
BindingDetail bindingdetail=inquiryService.getBindingDetail(gbd);
BindingTemplate bindingtemplate=bindingdetail.getBindingTemplate().get(0);
String accesspoint=bindingtemplate.getAccessPoint().getValue();
System.out.println("**accessPoint:"+accesspoint); //输出accessPoint
}
}
System.out.println("查询成功!!!");
}catch(Exception e)
{
e.printStackTrace();
Assert.fail("Could not obtain authInfo token.");}
}
public static void main(String[] args){
Inquiry inq=new Inquiry();
inq.inquiry();
}
}
3. 打开工程,进入%工程目录%\WebRoot\WEB-INF\classes\,我的是C:\Documents and Settings\Administrator\Workspaces\MyEclipse 8.5\Test_Publish02\WebRoot\WEB-INF\classes\,有点长。。新建一个META-INF包,将uddi.xml放入
uddi.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<uddi>
<reloadDelay>5000</reloadDelay>
<manager name="test-manager">
<nodes>
<node isHomeJUDDI="true">
<!-- required 'default' node -->
<name>default</name>
<description>Main jUDDI node</description>
<properties>
<property name="serverName" value="localhost" />
<property name="serverPort" value="8080" />
</properties>
<!-- JAX-WS Transport -->
<proxyTransport>org.apache.juddi.v3.client.transport.JAXWSTransport</proxyTransport>
<custodyTransferUrl>http://${serverName}:${serverPort}/juddiv3/services/custody-transfer?wsdl</custodyTransferUrl>
<inquiryUrl>http://${serverName}:${serverPort}/juddiv3/services/inquiry?wsdl</inquiryUrl>
<publishUrl>http://${serverName}:${serverPort}/juddiv3/services/publish?wsdl</publishUrl>
<securityUrl>http://${serverName}:${serverPort}/juddiv3/services/security?wsdl</securityUrl>
<subscriptionUrl>http://${serverName}:${serverPort}/juddiv3/services/subscription?wsdl</subscriptionUrl>
<subscriptionListenerUrl>http://${serverName}:${serverPort}/juddiv3/services/subscription-listener?wsdl</subscriptionListenerUrl>
<juddiApiUrl>http://${serverName}:${serverPort}/juddiv3/services/juddi-api?wsdl</juddiApiUrl>
<!-- In VM Transport Settings
<proxyTransport>org.apache.juddi.v3.client.transport.InVMTransport</proxyTransport>
<custodyTransferUrl>org.apache.juddi.api.impl.UDDICustodyTransferImpl</custodyTransferUrl>
<inquiryUrl>org.apache.juddi.api.impl.UDDIInquiryImpl</inquiryUrl>
<publishUrl>org.apache.juddi.api.impl.UDDIPublicationImpl</publishUrl>
<securityUrl>org.apache.juddi.api.impl.UDDISecurityImpl</securityUrl>
<subscriptionUrl>org.apache.juddi.api.impl.UDDISubscriptionImpl</subscriptionUrl>
<subscriptionListenerUrl>org.apache.juddi.api.impl.UDDISubscriptionListenerImpl</subscriptionListenerUrl>
<juddiApiUrl>org.apache.juddi.api.impl.JUDDIApiImpl</juddiApiUrl>
-->
<!-- RMI Transport Settings
<proxyTransport>org.apache.juddi.v3.client.transport.RMITransport</proxyTransport>
<custodyTransferUrl>/juddiv3/UDDICustodyTransferService</custodyTransferUrl>
<inquiryUrl>/juddiv3/UDDIInquiryService</inquiryUrl>
<publishUrl>/juddiv3/UDDIPublicationService</publishUrl>
<securityUrl>/juddiv3/UDDISecurityService</securityUrl>
<subscriptionUrl>/juddiv3/UDDISubscriptionService</subscriptionUrl>
<subscriptionListenerUrl>/juddiv3/UDDISubscriptionListenerService</subscriptionListenerUrl>
<juddiApiUrl>/juddiv3/JUDDIApiService</juddiApiUrl>
<javaNamingFactoryInitial>org.jnp.interfaces.NamingContextFactory</javaNamingFactoryInitial>
<javaNamingFactoryUrlPkgs>org.jboss.naming</javaNamingFactoryUrlPkgs>
<javaNamingProviderUrl>jnp://localhost:1099</javaNamingProviderUrl>
-->
</node>
<!--
<node>
<name>med</name>
<description>jUDDI node in other Department</description>
<proxyTransport>org.apache.juddi.v3.client.transport.JAXWSTransport</proxyTransport>
<custodyTransferUrl>http://med:8080/juddiv3/services/custody-transfer?wsdl</custodyTransferUrl>
<inquiryUrl>http://med:8080/juddiv3/services/inquiry?wsdl</inquiryUrl>
<publishUrl>http://med:8080/juddiv3/services/publish?wsdl</publishUrl>
<securityUrl>http://med:8080/juddiv3/services/security?wsdl</securityUrl>
<subscriptionUrl>http://med:8080/juddiv3/services/subscription?wsdl</subscriptionUrl>
<subscriptionListenerUrl>http://med:8080/juddiv3/services/subscription-listener?wsdl</subscriptionListenerUrl>
<juddiApiUrl>http://med:8080/juddiv3/services/juddi-api?wsdl</juddiApiUrl>
</node>
-->
</nodes>
<!--
<clerks registerOnStartup="false">
<clerk name="default" node="default" publisher="root" password="root"/>
<clerk name="medroot" node="med" publisher="root" password="root"/>
<xregister>
<service bindingKey="uddi:juddi.apache.org:servicebindings-subscriptionlistener-ws" fromClerk="default" toClerk="medroot"/>
</xregister>
<subscription subscriptionKey=" " clerk="medroot" />
</clerks>
-->
</manager>
</uddi>
这里,如果你要访问远程的juddiv3,将<node isHomeJUDDI="true">改为<node isHomeJUDDI="false">,<property name="serverName" value="localhost" />中的localhost改成你要访问的juddiv3所在机器的ip地址,这样就可以访问了~~
4. 搞定~下篇上发布服务的~