我搜索了这个论坛并搜索了网,但我无法找到解决问题的方法。
我获得了一个WSDL文件,使用它在axis1.4的帮助下生成存根。我还创建了与服务所需的XML响应完全相同的XML响应,但是当我尝试访问该服务时,它表示"授权失败"。
然后我才知道网页服务受用户名密码保护。
我应该如何在XML请求中发送用户名密码。
下面是我的代码如何生成请求。
public class SearcUserFriendlyIsMain {
/**
* @param args
*/
Tews6SoapBindingStub stub = null;
public void init(){
if(null == stub) {
try {
URL url = null;
String endPoint = "http://localhost:1111";
try {
url = new URL(endPoint);
} catch (MalformedURLException e) {
e.printStackTrace();
}
stub = new Tews6SoapBindingStub(url, null);
stub.setMaintainSession(true);
} catch (AxisFault e) {
StringBuffer sb = new StringBuffer();
for (StackTraceElement t : e.getStackTrace()) {
sb.append("\n").append(t.toString());
}
System.out.println("DEBUG"+ sb.toString());
}
}
}
public static void main(String[] args) {
SearcUserFriendlyIsMain tds = new SearcUserFriendlyIsMain();
tds.init();
NYCBSearchUserByFriendlyIdQuery query = new NYCBSearchUserByFriendlyIdQuery();
NYCBSearchUserByFriendlyIdSearch search = new NYCBSearchUserByFriendlyIdSearch();
NYCBSearchUserByFriendlyIdQueryResult res = null;
NYCBSearchUserByFriendlyIdSearchFilter filter = new NYCBSearchUserByFriendlyIdSearchFilter();
NYCBSearchUserByFriendlyIdSearchFilter[] filters = {filter};
filter.setOp(OperatorType.EQUALS);
filter.setIndex(new BigInteger("1"));
filter.setField("USERID");
filter.setValue("junaidaj01");
search.setFilter(filters);
NYCBSearchUserByFriendlyIdQueryTaskContext context = new NYCBSearchUserByFriendlyIdQueryTaskContext();
context.setAdmin_id("uid=00000001-0001-0001-0001-0000000ja202,ou=serviceaccounts,dc=test,dc=com");
query.setNYCBSearchUserByFriendlyIdSearch(search);
try {
res = tds.stub.NYCBSearchUserByFriendlyIdQuery(context,query);
System.out.println(res.getImsStatus());
} catch (ImsException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
使用基本HTTP身份验证 如果您的Web服务要求您使用HTTP基本身份验证,则可以调整Axis客户端代码,如下所示:
// to use Basic HTTP Authentication:
((Stub) service)._setProperty(Call.USERNAME_PROPERTY, "user name");
((Stub) service)._setProperty(Call.PASSWORD_PROPERTY, "password");
添加SOAP标头元素 有时,Web服务还需要您包含SOAP Header信息,通常用于登录目的。对于显式头(在WSDL中定义),SOAP Header信息应该可以直接从Axis客户端代码写入。但是,如果标头是隐式的(未在WSDL中定义),则必须手动生成它们。
// add a <UserName> node to the SOAP Header
((Stub) service).setHeader("urn:thisNamespace", "UserName", "Kuntal Ganguly");
如果这可以解决您的问题,请告诉我?