gpt4 book ai didi

web-services - Axis2 Web 服务客户端失败 AxisFault : Address already in use: NET_Bind

转载 作者:行者123 更新时间:2023-11-28 22:22:16 30 4
gpt4 key购买 nike

我正在使用 Axis 2 和 tomcat maven 插件(使用 Eclipse 嵌入式 Maven 启动)开发 Web 服务。出于测试目的,我使用 AXIOM 开发了一个 Web 服务客户端。

当我在我的系统 (Windows 7 Pro) 上运行客户端时,我遇到了各种行为,其中大部分是失败的:

org.apache.axis2.AxisFault: Address already in use: NET_Bind
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:197)
at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:555)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:531)
at com.nm.bdl.Launcher.main(Launcher.java:82)
Caused by: java.net.BindException: Address already in use: NET_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:398)
at java.net.Socket.bind(Socket.java:582)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:615)
at org.apache.commons.httpclient.protocol.ReflectionSocketFactory.createSocket(ReflectionSocketFactory.java:139)
at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:125)
at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707)
at org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.open(MultiThreadedHttpConnectionManager.java:1361)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621)
at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
... 10 more

极少数情况下,客户端程序能够成功访问到web服务。

Web 服务和客户端程序运行良好,我在其他计算机(仍然是 Windows 7 Pro)上测试了两者。当我从另一台计算机成功运行 Web 服务客户端时,它也有效。

这里是 pom.xml 中 tomcat 插件的定义:

  <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>full</version>
</dependency>
</dependencies>
<configuration>
<server>tomcat-development-server</server>
<port>9966</port>
<path>/</path>
<systemProperties>
<logs.dir>logs</logs.dir>
</systemProperties>
<useNaming>true</useNaming>
<contextFile>${basedir}/src/test/resources/tomcatconf/context.xml</contextFile>
<!--
<configurationDir>${basedir}/src/main/tomcatconf</configurationDir>
-->
</configuration>
<executions>
<execution>
<id>run-tomcat</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>

网络服务客户端程序:

  static String address_WS   = "http://localhost:9966/services/GetGedFile";

/**
* @param args
*/
public static void main(String[] args) {

final EndpointReference targetService = new EndpointReference(address_WS);

/* ... */

try {
Options options = new Options();

ServiceClient client = new ServiceClient();
options.setTo(targetService);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, "true");
options.setTimeOutInMilliSeconds(360000);

client.setOptions(options);

OMElement result = client.sendReceive(serviceOp);

String response = result.getFirstElement().getText();
System.err.println("WS call result: " + response);

OMNode node = result.getFirstElement().getFirstOMChild();
if (node instanceof OMText) {
OMText txt = (OMText) node;

String data = txt.getText();
byte[] dataBytes = Base64.decode(data);

String realString = new String(dataBytes,"UTF-8");
System.out.println("pseudo binary data received : " + realString);
}

} catch(AxisFault af) {
af.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}

我曾尝试清理 Windows 服务、停止防病毒、使用其他端口(不同于端口 9966)、用 IP 地址替换 localhost : 都是徒劳的。我已使用 TCPView 监控我的系统,以检查 axis 网络服务是否使用与 tomcat 插件中配置的端口相同的端口。

还有其他想法吗?

编辑:另一个错误堆栈跟踪

log4j:WARN No appenders could be found for logger (org.apache.axis2.context.AbstractContext).
log4j:WARN Please initialize the log4j system properly.
org.apache.axis2.AxisFault: com.ctc.wstx.exc.WstxIOException: Unrecognized Windows Sockets error: -1: socket available
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:123)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:67)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:354)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:555)
at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:531)
at com.nm.bdl.Launcher.main(Launcher.java:82)
Caused by: org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxIOException: Unrecognized Windows Sockets error: -1: socket available
at org.apache.axiom.om.impl.llom.factory.AbstractOMMetaFactory.createXMLStreamReader(AbstractOMMetaFactory.java:63)
at org.apache.axiom.om.impl.llom.factory.AbstractOMMetaFactory.createSOAPModelBuilder(AbstractOMMetaFactory.java:129)
at org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(OMXMLBuilderFactory.java:426)
at org.apache.axiom.om.OMXMLBuilderFactory.createSOAPModelBuilder(OMXMLBuilderFactory.java:405)
at org.apache.axis2.builder.SOAPBuilder.processDocument(SOAPBuilder.java:55)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:179)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:145)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:108)
... 8 more
Caused by: com.ctc.wstx.exc.WstxIOException: Unrecognized Windows Sockets error: -1: socket available
at com.ctc.wstx.stax.WstxInputFactory.doCreateSR(WstxInputFactory.java:548)
at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:604)
at com.ctc.wstx.stax.WstxInputFactory.createSR(WstxInputFactory.java:629)
at com.ctc.wstx.stax.WstxInputFactory.createXMLStreamReader(WstxInputFactory.java:324)
at org.apache.axiom.util.stax.wrapper.XMLInputFactoryWrapper.createXMLStreamReader(XMLInputFactoryWrapper.java:95)
at org.apache.axiom.util.stax.wrapper.WrappingXMLInputFactory.createXMLStreamReader(WrappingXMLInputFactory.java:116)
at org.apache.axiom.util.stax.wrapper.XMLInputFactoryWrapper.createXMLStreamReader(XMLInputFactoryWrapper.java:95)
at org.apache.axiom.util.stax.wrapper.WrappingXMLInputFactory.createXMLStreamReader(WrappingXMLInputFactory.java:116)
at org.apache.axiom.util.stax.wrapper.XMLInputFactoryWrapper.createXMLStreamReader(XMLInputFactoryWrapper.java:95)
at org.apache.axiom.om.util.StAXUtils$1.run(StAXUtils.java:201)
at java.security.AccessController.doPrivileged(AccessController.java:241)
at org.apache.axiom.om.util.StAXUtils.createXMLStreamReader(StAXUtils.java:197)
at org.apache.axiom.om.impl.llom.factory.AbstractOMMetaFactory.createXMLStreamReader(AbstractOMMetaFactory.java:55)
... 15 more
Caused by: java.net.SocketException: Unrecognized Windows Sockets error: -1: socket available
at java.net.PlainSocketImpl.socketAvailable(Native Method)
at java.net.PlainSocketImpl.available(PlainSocketImpl.java:487)
at java.net.SocketInputStream.available(SocketInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:332)
at org.apache.commons.httpclient.WireLogInputStream.read(WireLogInputStream.java:69)
at org.apache.commons.httpclient.ChunkedInputStream.read(ChunkedInputStream.java:182)
at java.io.FilterInputStream.read(FilterInputStream.java:134)
at org.apache.commons.httpclient.AutoCloseInputStream.read(AutoCloseInputStream.java:108)
at java.io.FilterInputStream.read(FilterInputStream.java:134)
at org.apache.axiom.om.util.DetachableInputStream.read(DetachableInputStream.java:147)
at java.io.FilterInputStream.read(FilterInputStream.java:134)
at java.io.PushbackInputStream.read(PushbackInputStream.java:182)
at java.io.FilterInputStream.read(FilterInputStream.java:113)
at com.ctc.wstx.io.UTF8Reader.loadMore(UTF8Reader.java:365)
at com.ctc.wstx.io.UTF8Reader.read(UTF8Reader.java:110)
at com.ctc.wstx.io.ReaderBootstrapper.initialLoad(ReaderBootstrapper.java:245)
at com.ctc.wstx.io.ReaderBootstrapper.bootstrapInput(ReaderBootstrapper.java:132)
at com.ctc.wstx.stax.WstxInputFactory.doCreateSR(WstxInputFactory.java:543)
... 27 more

最佳答案

我的问题是通过更改客户端程序的 java 运行时解决的。我使用的是 IBM Jdk 5(这是 Web 服务服务器的要求),我切换到标准 Jre 6。

关于web-services - Axis2 Web 服务客户端失败 AxisFault : Address already in use: NET_Bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11780498/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com