我试图建立到我的Apex-Webservice的连接,但每次都失败。我的Webserce非常简单:
global class AtlassianService
{
webService static String hello(String Name)
{
return 'Hello '+Name+' ! :D';
}
}为了生成客户端,我使用了here描述的方法
java –classpath pathToJAR/wsc-22.jar com.sforce.ws.tools.wsdlc pathToWsdl/WsdlFilename pathToOutputJar/OutputJarFilename访问the服务:
SoapConnection soap = Connector.newConnection("mail@XXXXXX.com", "XXXX");
System.out.println(soap.hello("WORLD")); // Invalid Session ( => SessionID is null)如果我使用PartnerConnection来获得一个有效的SessionID,一切都会正常工作:
ConnectorConfig config = new ConnectorConfig();
config.setUsername(username);
config.setPassword(password);
config.setAuthEndpoint("https://login.salesforce.com/services/Soap/u/24.0");
new PartnerConnection(config);
SoapConnection soap = Connector.newConnection(null, null);
soap.setSessionHeader(config.getSessionId());
System.out.println(soap.hello("WORLD"));有人知道为什么第一个例子失败了吗?
问候塞巴斯蒂安
发布于 2012-08-20 04:40:57
我假设发生这种情况的原因是,您的wsdl没有包含在AtlassianService中进行身份验证的登录方法,因此由wsdl生成的代理类无法拥有实际执行登录的代码。
我正在尝试做一些与您的问题非常相似的事情(但使用的是Enterprise API)。我找到的解决方案是:
使用WSC (mywebservice.jar)
如下所示:
import com.sforce.soap.MyWebservice.SoapConnection;
import com.sforce.soap.MyWebservice.Connector;
import com.sforce.ws.ConnectionException;
import com.sforce.ws.ConnectorConfig;
import com.sforce.soap.enterprise.*;
public class CallWS {
static final String USERNAME = "username";
static final String PASSWORD = "pass+securitytoken";
static SoapConnection MyWebserviceWSconnection;
static EnterpriseConnection enterpriseConnection;
public static void main(String[] args) {
ConnectorConfig config = new ConnectorConfig();
config.setUsername(USERNAME);
config.setPassword(PASSWORD);
try {
//create a connection to Enterprise API -- authentication occurs
enterpriseConnection = com.sforce.soap.enterprise.Connector.newConnection(config);
// display some current settings
System.out.println("Auth EndPoint: "+config.getAuthEndpoint());
System.out.println("Service EndPoint: "+config.getServiceEndpoint());
System.out.println("Username: "+config.getUsername());
System.out.println("SessionId: "+config.getSessionId());
//create new connection to exportData webservice -- no authentication information is included
MyWebserviceWSconnection = Connector.newConnection("","");
//include session Id (obtained from enterprise api) in exportData webservice
MyWebserviceWSconnection.setSessionHeader(config.getSessionId());
String result = MyWebserviceWSconnection.receiveData("test");
System.out.println("Result: "+result);
} catch (ConnectionException e1) {
e1.printStackTrace();
}
}
}发布于 2012-06-28 15:10:32
在出现错误的情况下,wsc的每个操作调用都会抛出一个ConnectionException或它的一个具体的子类型。因此,您应该会得到一条错误消息,这可能有助于解决问题。为了调试由wsc发送和接收的soap消息,在初始化ConnectorConfig之后添加以下行:
conf.setPrettyPrintXml(true);
conf.setTraceMessage(true);这将很好地打印出客户机和and服务之间交换的整个xml。resoponse还可能帮助您找到问题的原因。
希望这能有所帮助。h9nry
https://stackoverflow.com/questions/11204614
复制相似问题