axis客户端调用用axis方式发布的接口,报错:{http://xml.apache.org/axis/}HttpErrorCode:404

axis客户端调用用axis方式发布的接口,报错:{http://xml.apache.org/axis/}HttpErrorCode:404



原因是:

如下的address访问不了。在浏览器中输入http://127.0.0.1:8080/testProject/services/myService?wsdl,看能不能拿到wsdl文件。

public String XXX(String input) {
String address= "http://127.0.0.1:8080/testProject/services/myService?wsdl";
String action= "XXX";
org.apache.axis.client.Service service = new org.apache.axis.client.Service();
Call call;
try {
call = (Call) service.createCall();
try {
call.setTargetEndpointAddress(new java.net.URL(address));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
call.setOperationName(action);
// Object[] obj;
String result;
try {
result = (String) call.invoke(new Object[] { input});
return result;
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


return null;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.TOMCAT+AXIS的安装配置 首先机子上应该安装JDK1.5版本以上(带有XML解析包)。我这里是1.5.0.6 从APACHE的官方网站(www.apache.org)下载TOMCAT安装软件。下载版本要在4.0以上。这里用的是5.0版本。安装完后,启动TOMCAT,访问http://localhost:8080/安装成功应该出现Apache启动页面。以下用TOMCAT_HOME表示TOMCAT的安装主目录。 解压缩AXIS软件包(这里为1.4版本axis.war包)。 将axis项目放在某个盘的根目录下,(因在tomcat的安装目录在版本号前有个空格,配置axis环境变量时系统认不到对应的变量路径) 如:D:\axis;然后在TOMCAT的server.xml的添加项目加载的<Context>: <Context path="/axis" docBase="D:/axis" debug="0" reloadable="true" crossContext="true"></Context> 重新启动TOMCAT,访问http://localhost:8080/axis/,出现Apache-Axis启动页面。点击链接Validation进入页面。上面会显示已经找到的jar包和未找到的jar包。对于未找到的jar包。可以从它提示的链接中下载。我缺少activation.jar,mail.jar,xerces.jar这里在可选组件(optional components)中提示缺少xml-security包。从它提示的地址下载软件包后,解压缩后在lib文件夹下,将xalan.jar和xmlsec-1.2.1.jar复制到TOMCAT_HOME\webapps\axis\WEB-INF\lib下。重新启动TOMCAT,再点击链接Validation进入页面后。将没有未找到包的提示了。 接下来配置类路径。右键点击我的电脑——属性——高级——环境变量。在系统变量中选择ClassPath进行编辑。增加下列类路径(以“;”间隔符)。 D:\axis\WEB-INF\lib\activation.jar; D:\axis\WEB-INF\lib\axis.jar; D:\axis\WEB-INF\lib\axis-ant.jar; D:\axis\WEB-INF\lib\axis-schema.jar; D:\axis\WEB-INF\lib\commons-discovery-0.2.jar; D:\axis\WEB-INF\lib\commons-logging-1.0.4.jar; D:\axis\WEB-INF\lib\jaxrpc.jar; D:\axis\WEB-INF\lib\log4j-1.2.8.jar; D:\axis\WEB-INF\lib\mail.jar; D:\axis\WEB-INF\lib\saaj.jar; D:\axis\WEB-INF\lib\wsdl4j-1.5.1.jar; D:\axis\WEB-INF\lib\xmlsec.jar 启动TOMCAT,浏览器输入http://localhost:8080/axis/HelloWorldService.jws?wsdl 会出现wsdl页面。说明可以提供正常服务了。 现在可以制作客户端了程序了, 命令参数的形式: java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/HelloWorldService.jws?wsdl -p test.webservice -o C:\prj 参数说明: -p 指定生成的java文件包名 (可省略默认为 HelloWorldService内的包名路径) -o 指定生成的java文件输出目录 如果你看到这样的画面就表示正常运作并自动产生四个.JAVA的档案了,如果出现 org/apache/...CLASS NOT FOUND之类的话可能你的ClASSPATH设置的有问题。 在C:\prj\localhost\axis\HelloWorldService_jws下面产生以下四个文件 HelloWorldService.java HelloWorldServiceService.java HelloWorldServiceServiceLocator.java HelloWorldServiceSoapBindingStub.java 现在可以将以上生成的四个类进行调用发布的webservice 注:HelloWorldService 的webservice已经创建在axis1.4.rar包内,只要运行axis项目即可访问到该webservice
调用 SOAP 接口,你需要使用 Java 的 SOAP 客户端库。其中比较常用的有 Apache AxisApache CXF。在使用之前,你需要先下载相关的 jar 包,然后将其添加到你的项目中。 对于 Apache Axis,你可以从官网上下载最新版本的二进制包。下载后,解压缩得到一个 axis-x.x 目录。里面包含了一些 jar 包,其中最重要的是 axis.jar 和 commons-discovery.jar。你需要将这些 jar 包添加到你的项目中,并将其设置为 classpath。 对于 Apache CXF,你可以从官网上下载最新版本的二进制包。下载后,解压缩得到一个 apache-cxf-x.x.x 目录。里面包含了一些 jar 包,其中最重要的是 cxf-core.jar 和 cxf-rt-bindings-soap.jar。你需要将这些 jar 包添加到你的项目中,并将其设置为 classpath。 完成 jar 包的准备工作后,你就可以开始编写 Java 代码来调用 SOAP 接口了。具体的步骤如下: 1. 创建一个 Service 对象。Service 对象用于访问 WSDL 文件,并从中获取相关的服务信息。 ```java import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; URL wsdlUrl = new URL("http://10.50.0.105:4968/daws/services/DAService?wsdl"); QName serviceName = new QName("http://example.com/wsdl", "DAService"); Service service = Service.create(wsdlUrl, serviceName); ``` 2. 创建一个 Dispatch 对象。Dispatch 对象用于发送 SOAP 请求,并接收 SOAP 响应。Dispatch 对象有两种类型:Message 和 Payload。前者用于处理 SOAP 消息,后者用于处理 SOAP 负载。 ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.Unmarshaller; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPConstants; import javax.xml.soap.SOAPMessage; import javax.xml.transform.dom.DOMSource; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import javax.xml.ws.Service.Mode; import javax.xml.ws.handler.MessageContext; import javax.xml.ws.http.HTTPBinding; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; QName portName = new QName("http://example.com/wsdl", "DAServicePort"); Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Mode.MESSAGE); MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); SOAPMessage request = messageFactory.createMessage(); request.setProperty(MessageContext.HTTP_REQUEST_HEADERS, new HashMap<String, Object>()); request.setProperty(MessageContext.HTTP_RESPONSE_HEADERS, new HashMap<String, Object>()); request.setProperty(MessageContext.HTTP_RESPONSE_CODE, 200); ByteArrayOutputStream out = new ByteArrayOutputStream(); request.writeTo(out); InputStream in = new ByteArrayInputStream(out.toByteArray()); SOAPMessage soapMessage = messageFactory.createMessage(null, in); ``` 3. 发送 SOAP 请求,并接收 SOAP 响应。在发送请求之前,你需要根据 WSDL 文件中定义的 SOAP 操作,构造一个合法的 SOAP 消息。在接收响应之后,你需要对响应进行解析,并提取出其中的有效数据。 ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.Unmarshaller; import javax.xml.namespace.QName; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPConstants; import javax.xml.soap.SOAPMessage; import javax.xml.transform.dom.DOMSource; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import javax.xml.ws.Service.Mode; import javax.xml.ws.handler.MessageContext; import javax.xml.ws.http.HTTPBinding; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.HashMap; import java.util.Map; // 构造 SOAP 消息 QName operationName = new QName("http://example.com/wsdl", "getWeather"); JAXBContext jaxbContext = JAXBContext.newInstance(GetWeather.class); Marshaller marshaller = jaxbContext.createMarshaller(); GetWeather request = new GetWeather(); request.setCity("Beijing"); JAXBElement<GetWeather> payload = new JAXBElement<GetWeather>(operationName, GetWeather.class, request); marshaller.marshal(payload, soapMessage.getSOAPBody()); // 发送 SOAP 请求,并接收 SOAP 响应 SOAPMessage response = dispatch.invoke(soapMessage); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); DOMSource source = new DOMSource(response.getSOAPBody().getFirstChild()); JAXBElement<GetWeatherResponse> result = unmarshaller.unmarshal(source, GetWeatherResponse.class); GetWeatherResponse weatherResponse = result.getValue(); System.out.println(weatherResponse.getWeather()); ``` 以上就是调用 SOAP 接口的基本步骤。需要注意的是,具体实现可能会有所不同,具体要根据 WSDL 文件的内容来进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值