axis2发布Webservice问题

icecream_ 2011-05-18 03:25:02
java里面建了两个类WeightedGraph和Dijkstra,Dijkstra使用了WeightedGraph类,现在我想把Dijkstra用webservice发布,通过service.xml形式打包放到放到axis的文件夹中,发布成功了,但是客户端调用出不来结果。求高人解决!!

package service;

import java.util.ArrayList;
import java.util.Scanner;

public class WeightedGraph {

private int [][] edges; // adjacency matrix
private Object [] labels;
public WeightedGraph(int n,int [][] edges,Object [] labels) {
this.edges = new int [n][n];
this.labels = new Object[n];
this.edges = edges;
this.labels = labels;
}
public int size() { return labels.length; }

public void setLabel (int vertex, Object label) { labels[vertex]=label; }
public Object getLabel (int vertex) { return labels[vertex]; }

public void addEdge (int source, int target, int w) { edges[source][target] = w;edges[target][source] = w;}
public boolean isEdge (int source, int target) { return edges[source][target]>0; }
public void removeEdge (int source, int target) { edges[source][target] = 0; }
public int getWeight (int source, int target) { return edges[source][target]; }

public int [] neighbors (int vertex) {
int count = 0;
for (int i=0; i<edges[vertex].length; i++) {
if (edges[vertex][i]>0) count++;
}
final int[]answer= new int[count];
count = 0;
for (int i=0; i<edges[vertex].length; i++) {
if (edges[vertex][i]>0) answer[count++]=i;
}
return answer;
}
public void setEdges(int [][] edges){
this.edges = edges;
}
public void setLabels(Object labels[]) {
this.labels = labels;
}
}

package service;

import java.util.ArrayList;

public class Dijkstra {

// Dijkstra's algorithm to find shortest path from s to all other nodes
public int [] dijkstra (WeightedGraph G, int s) {
final int [] dist = new int [G.size()]; // shortest known distance from "s"
final int [] pred = new int [G.size()]; // preceeding node in path
final boolean [] visited = new boolean [G.size()]; // all false initially

for (int i=0; i<dist.length; i++) {
dist[i] = Integer.MAX_VALUE;
// dist[i] = G.getWeight(s,i);
}
dist[s] = 0;

for (int i=0; i<dist.length; i++) {
final int next = minVertex (dist, visited);
if(next>=0) {
visited[next] = true;

// The shortest path to next is dist[next] and via pred[next].

final int [] n = G.neighbors (next);
for (int j=0; j<n.length; j++) {
final int v = n[j];
final int d = dist[next] + G.getWeight(next,v);
if (dist[v] > d) {
dist[v] = d;
pred[v] = next;
}
}
}
}
return pred; // (ignore pred[s]==0!)
}

private int minVertex (int [] dist, boolean [] v) {
int x = Integer.MAX_VALUE;
int y = -1; // graph not connected, or no unvisited vertices
for (int i=0; i<dist.length; i++) {
if (!v[i] && dist[i]<x) {y=i; x=dist[i];}
}
return y;
}

public ArrayList getPath (WeightedGraph G, int [] pred, int s, int e) {
final ArrayList path = new ArrayList();
int x = e;
while (x!=s) {
path.add (0, G.getLabel(x));
x = pred[x];
}
path.add (0, G.getLabel(s));
return path;
// System.out.println (path);
}

public ArrayList pathPlan(int n,int [][]edges,Object []labels,int s,int t) {
WeightedGraph G = new WeightedGraph(n,edges,labels);
int [] pred = dijkstra (G, s);
ArrayList al = getPath (G, pred, s, t);
return al;
}
}


客户端调用

package test;

import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

import java.util.ArrayList;

public class PathPlanClient {
public static void main(String[] args) throws Exception
{
// 使用RPC方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(
"http://localhost:8080/axis2/services/Dijkstra");
options.setTo(targetEPR);
// 指定pathPlan方法的参数值
int [][]edges = {
{0, 2, 0, 0, 0, 9},
{2, 0, 8, 15, 0, 6},
{0, 8, 0, 1, 7, 0},
{0, 15, 1, 0, 3, 0},
{0, 0, 7, 3, 0, 3},
{9, 6, 0, 0, 3, 0}};
Object []labels = {"v0","v1","v2","v3","v4","v5"};

Object[] opAddEntryArgs = new Object[] {labels};

// 指定pathPlan方法返回值的数据类型的Class对象
Class[] classes = new Class[] {ArrayList.class};
// 指定要调用的pathPlan方法及WSDL文件的命名空间
QName opAddEntry = new QName("http://service", "pathPlan");
opAddEntryArgs = new Object[] {6,edges,labels,3,0};

ArrayList al = (ArrayList)serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0];
System.out.println(al);
}
}

...全文
121 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Olfa89 2012-04-28
  • 打赏
  • 举报
回复
hello :)
I'd like to make a web service that allows to find the shortest path between bus stations with Dijkstra's algorithm, then the path will be displayed on a map. (I have a database that contains the coordinated stations) but I do not know "how to start": , I am really blocked for a week and i dont find any thing :( , i dont find a tutorials as this subject :( :( :(
( This web service will be used by my android application)
realy i need help :(
(i use eclipse)
thank you in advance :)
tubage408 2011-05-24
  • 打赏
  • 举报
回复
lz说发布成功了,那发布后对应服务的wsdl能访问么??要是能访问的到肯定是客户端的事儿了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧