我目前正在调查使用Java Web Service的可能性(如Windchill的Info * Engine文档所述),以便检索有关部件的信息。我使用的是Windchill 10.1版。
我已经成功部署了一个Web服务,我在.Net应用程序中使用它。不尝试访问Windchill信息的呼叫成功完成。但是,在尝试检索零件信息时,我得到了wt.method.AuthenticationException。
以下是在webService中运行的代码(Web服务方法只是调用此方法)
public static String GetOnePart(String partNumber) throws WTException
{
WTPart part=null;
RemoteMethodServer server = RemoteMethodServer.getDefault();
server.setUserName("theUsername");
server.setPassword("thePassword");
try {
QuerySpec qspec= new QuerySpec(WTPart.class);
qspec.appendWhere(new SearchCondition(WTPart.class,WTPart.NUMBER,SearchCondition.LIKE,partNumber),new int[]{0,1});
// This fails.
QueryResult qr=PersistenceHelper.manager.find((StatementSpec)qspec);
while(qr.hasMoreElements())
{
part=(WTPart) qr.nextElement();
partName = part.getName();
}
} catch (AuthenticationException e) {
// Exception caught here.
partName = e.toString();
}
return partName;
}
此代码适用于部署在服务器上的命令行应用程序,但在Web服务中执行时失败并出现wt.method.AuthenticationException。我觉得它失败了,因为RemoteMethodServer的使用不是我应该做的,因为Web服务在MethodServer中。
无论如何,如果有人知道如何做到这一点,那就太棒了。 一个额外的问题是如何从Web服务中进行登录,以及如何配置此日志记录。
谢谢。
答案 0 :(得分:1)
您无需使用此代码在服务器端进行身份验证
RemoteMethodServer server = RemoteMethodServer.getDefault();
server.setUserName("theUsername");
server.setPassword("thePassword");
如果您已按照文档(windchill帮助中心),您的Web服务应该是使用@WebServices和@WebMethod(operationName =“getOnePart”)注释并继承com.ptc.jws.servlet.JaxWsService
此外,您还必须注意部署期间使用的策略。 默认的ant脚本配置为
security.policy=userNameAuthSymmetricKeys
因此,当你使用.Net消费你的w时,你需要管理它。
对于记录事件,您只需要调用默认情况下使用$log.debug("Hello")
答案 1 :(得分:0)
您无法预先验证服务器端。
您可以将auth写入您的客户端。不确定.Net equivilent是什么,但这适用于Java客户端:
private static final String USERNAME = "admin";
private static final String PASSWORD = "password";
static {
java.net.Authenticator.setDefault(new java.net.Authenticator() {
@Override
protected java.net.PasswordAuthentication getPasswordAuthentication() {
return new java.net.PasswordAuthentication(USERNAME, PASSWORD.toCharArray());
}
});
}