【问题标题】:Java Web Service client authentication using eclipse使用 Eclipse 的 Java Web Service 客户端身份验证
【发布时间】:2012-09-20 13:37:17
【问题描述】:

我使用默认的 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

请告知我应该改变什么?

【问题讨论】:

  • 如何在服务器中进行身份验证...请分享信息

标签: java eclipse web-services wsdl


【解决方案1】:

根据您的错误,我假设您使用的是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");

【讨论】:

    猜你喜欢
    • 2011-10-27
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多