0

デフォルトの Eclipse ウィザードを使用して Web サービス クライアントを作成しました ([ファイル] > [新規] > [その他] で、Web サービス クライアントのウィザードを選択します)。クラスが生成され、次のようなコードでサービス メソッドを使用できるようになりました。

import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.olsn.ws.ShipmentService_PortType;
import com.olsn.ws.ShipmentService_ServiceLocator;

public class wsClient {
 public static void main(String[] args) throws ServiceException, RemoteException {

             //To load the web service and to create the client
             ShipmentService_ServiceLocator WS = new ShipmentService_ServiceLocator();              
             ShipmentService_PortType client = WS.getShipmentServicePort();

             //To get Close status for Issue
             System.out.println(client.getCloseDesc("35557"));

             //To get the list of NetP projects
             for (int i=1; i<client.getProjects().length;i++)
                 {System.out.println(client.getProjects()[i].toString());}

           }

     }

現在の問題は、ユーザー名とパスワードが導入されたことです。サーバーにアクセスするためにコードを変更する方法がわからないため、オーセンティケーターを追加しようとしていました。

import java.net.Authenticator;
import java.net.PasswordAuthentication;

Authenticator myAuth = new Authenticator() 
{
    @Override
    protected PasswordAuthentication getPasswordAuthentication()
    {
        return new PasswordAuthentication("user", "password".toCharArray());
    }
};

Authenticator.setDefault(myAuth);

または、生成されたプロキシ クラスの _initShipmentServiceProxy() メソッドを変更します。

  private void _initShipmentServiceProxy() {
    try {
      shipmentService_PortType = (new com.olsn.ws.ShipmentService_ServiceLocator()).getShipmentServicePort();
      if (shipmentService_PortType != null) {
        if (_endpoint != null)
        {
          ((javax.xml.rpc.Stub)shipmentService_PortType)._setProperty("javax.xml.rpc.service.endpoint.address", _endpoint);
          **((javax.xml.rpc.Stub)shipmentService_PortType)._setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, "user");
          ((javax.xml.rpc.Stub)shipmentService_PortType)._setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, "password");**
        }  
        else
          _endpoint = (String)((javax.xml.rpc.Stub)shipmentService_PortType)._getProperty("javax.xml.rpc.service.endpoint.address");
      }

    }
    catch (javax.xml.rpc.ServiceException serviceException) {}
  }

しかし、私はこれらのエラーを受け取り続けます:

org.apache.axis.utils.JavaUtils isAttachmentSupported
WARNING: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled.
Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Client.Authentication
 faultSubcode: 
 faultString: Access denied to operation getCloseDesc

何を変更すればよいか教えてください。

4

1 に答える 1

2

あなたのエラーから、あなたが使用していると思いますAxisので、Authenticator動作しません。サービスに対してクライアントの基本認証を実行する場合は、次のAxisようにする必要があります。

private static final Logger LOGGER = LoggerFactory.getLogger(YourClass.class);

private ShipmentService_PortType proxy;

public void init()
        throws Exception {
    ShipmentService_ServiceLocator locator = new ShipmentService_ServiceLocator();
    try {
        LOGGER.debug("Initializing shipment service...");
        proxy = locator.getShipmentServicePort(new URL("yourServiceEndpointURL"));
        ((ShipmentServicePortBindingStub) proxy).setUsername("yourUsername");
        ((ShipmentServicePortBindingStub) proxy).setPassword("yourPassword");
        ((ShipmentServicePortBindingStub) proxy).setTimeout(10000);
        LOGGER.debug("Shipment service successfully initialized.");
    } catch (ServiceException e) {
        LOGGER.error("Error in shipment client initialization", e);
        throw new Exception("Error in shipment client initialization.");
    } catch (MalformedURLException e) {
        LOGGER.error("Error in shipment client initialization", e);
        throw new Exception("Error in shipment client initialization.");
    }
}

そして、このinit()メソッドが呼び出される場合にのみ、これを介してクライアントのメソッドを呼び出すことができます:

proxy.getCloseDesc("35557");
于 2012-09-20T15:58:53.547 に答える