1

Axis2とtomcatmavenプラグイン(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>

Webサービスクライアントプログラム:

  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アドレスに置き換えようとしました:無駄です。TCPViewを使用してシステムを監視し、AxisWebサービスが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
4

1 に答える 1

1

私の問題は、クライアントプログラムのJavaランタイムを変更することで解決されます。IBM Jdk 5(Webサービスサーバーの要件)を使用していて、標準のJre6に切り替えました。

于 2012-08-03T08:15:35.923 に答える