2016-07-29 85 views
2

我试图写一个Java客户端这个Web服务使用SOAP在Java中与API认证使用Web服务

http://api.exigo.com/3.0/ExigoApi.asmx?WSDL

,但不能设置它的认证头 在.NET环境中有一个属性该组的ApiAuthentication对象API 对象这样

//Set Authentication Header 
    ExigoApi api = new ExigoApi(); 
    ApiAuthentication auth = new ApiAuthentication(); 
    auth.Company = "company"; 
    auth.LoginName = "name"; 
    auth.Password = "password"; 
    api.ApiAuthenticationValue = auth; 

    //Create request object 
    GetCustomersRequest req = new GetCustomersRequest(); 

    //Specify which customer(s) we are getting 
    req.CustomerID = 1; 
    //Submit the request 
    GetCustomersResponse res = api.GetCustomers(req); 
    Console.WriteLine(res.Customers[0].CustomerID); 

但在Java中我无法找到这种方法

api.ApiAuthenticationValue = auth; 

这是我用Java编写的代码,但抛出异常

import com.exigo.api.*; 



public class ExigoDemoService { 


public static void main(String[] args) { 
    //Set Authentication Header 
    ExigoApi api = new ExigoApi(); 
    ApiAuthentication auth = new ApiAuthentication(); 
    auth.setCompany("company"); 
    auth.setLoginName("name"); 
    auth.setPassword("password"); 

    //Create request object 
    GetCustomersRequest req = new GetCustomersRequest(); 

    //Specify which customer(s) we are getting 
    req.setCustomerID(1); 
    //Submit the request 
    GetCustomersResponse res = api.getExigoApiSoap().getCustomers(req); 

} 

private static CreateCustomerResponse createCustomer(com.exigo.api.CreateCustomerRequest createCustomerRequest) { 
    com.exigo.api.ExigoApi service = new com.exigo.api.ExigoApi(); 
    com.exigo.api.ExigoApiSoap port = service.getExigoApiSoap(); 
    return port.createCustomer(createCustomerRequest); 
} 


private static GetCustomersResponse getCustomers(com.exigo.api.GetCustomersRequest getCustomersRequest) { 
    com.exigo.api.ExigoApi service = new com.exigo.api.ExigoApi(); 
    com.exigo.api.ExigoApiSoap port = service.getExigoApiSoap(); 
    return port.getCustomers(getCustomersRequest); 
} 

} 

抛出异常是

Exception in thread "main" com.sun.xml.internal.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: Authentication header missing! 
Unable to Authenticate! 
+0

会有人帮我?请让我真的被困在这里 –

回答

1

所以我已经解决了这个:

ExigoApiLocator service = null; 
ExigoApiSoap port = null; 

service = new ExigoApiLocator(); 
port = service.getExigoApiSoap(); 


ApiAuthentication authentication = new ApiAuthentication(); 
authentication.setCompany("XYZCompany"); 
authentication.setLoginName("XYZAPIUser"); 
authentication.setPassword("XYZPassword"); 
authentication.setRequestTimeUtc(Calendar.getInstance()); 

((Stub) port).setHeader("http://api.exigo.com/", "ApiAuthentication", authentication);