所以我一直在努力解决这个问题,奇怪的是,当我运行一台机器时,我得到了一个没有描述的通用轴故障,但是现在在另一台机器上我收到了不同的错误信息,但是我我仍然坚持。基本上我只是想做一些我认为通过Web服务调用在Microsoft Dynamics CRM 4.0中创建新事件的相当简单的任务。
我首先从http://hostname/MSCrmServices/2007/CrmService.asmx下载XML并使用Axis2从中生成代码。无论如何,这是我的计划,任何帮助将不胜感激,因为我已经坚持这个比我想象的更长的时间,我真的没有想法在这里。
public class TestCRM {
private static String endpointURL = "http://theHost/MSCrmServices/2007/CrmService.asmx";
private static String userName = "myUserNameHere";
private static String password = "myPasswordHere";
private static String host = "theHostname";
private static int port = 80;
private static String domain = "theDomain";
private static String orgName = "theOrganization";
public static void main(String[] args) {
CrmServiceStub stub;
try {
stub = new CrmServiceStub(endpointURL);
setOptions(stub._getServiceClient().getOptions());
RetrieveMultipleDocument rmd = RetrieveMultipleDocument.Factory.newInstance();
com.microsoft.schemas.crm._2007.webservices.RetrieveMultipleDocument.RetrieveMultiple rm = com.microsoft.schemas.crm._2007.webservices.RetrieveMultipleDocument.RetrieveMultiple.Factory.newInstance();
QueryExpression query = QueryExpression.Factory.newInstance();
query.setColumnSet(AllColumns.Factory.newInstance());
query.setEntityName(EntityName.INCIDENT.toString());
rm.setQuery(query);
rmd.setRetrieveMultiple(rm);
TargetCreateIncident tinc = TargetCreateIncident.Factory.newInstance();
Incident inc = tinc.addNewIncident();
inc.setDescription("This is a test of ticket creation through a web services call.");
CreateDocument cd = CreateDocument.Factory.newInstance();
Create create = Create.Factory.newInstance();
create.setEntity(inc);
cd.setCreate(create);
Incident test = (Incident)cd.getCreate().getEntity();
CrmAuthenticationTokenDocument catd = CrmAuthenticationTokenDocument.Factory.newInstance();
CrmAuthenticationToken token = CrmAuthenticationToken.Factory.newInstance();
token.setAuthenticationType(0);
token.setOrganizationName(orgName);
catd.setCrmAuthenticationToken(token);
//The two printlns below spit back XML that looks okay to me?
System.out.println(cd);
System.out.println(catd);
/* stuff that doesn't work */
CreateResponseDocument crd = stub.create(cd, catd, null, null); //this line throws the error
CreateResponse cr = crd.getCreateResponse();
System.out.println("create result: " + cr.getCreateResult());
/* End stuff that doesn't work */
System.out.println();
System.out.println();
System.out.println();
boolean fetchNext = true;
while(fetchNext){
RetrieveMultipleResponseDocument rmrd = stub.retrieveMultiple(rmd, catd, null, null);
//This retrieve using the CRMAuthenticationToken catd works just fine
RetrieveMultipleResponse rmr = rmrd.getRetrieveMultipleResponse();
BusinessEntityCollection bec = rmr.getRetrieveMultipleResult();
String pagingCookie = bec.getPagingCookie();
fetchNext = bec.getMoreRecords();
ArrayOfBusinessEntity aobe = bec.getBusinessEntities();
BusinessEntity[] myEntitiesAtLast = aobe.getBusinessEntityArray();
for(int i=0; i<myEntitiesAtLast.length; i++){
//cast to whatever you asked for...
Incident myEntity = (Incident) myEntitiesAtLast[i];
System.out.println("["+(i+1)+"]: " + myEntity);
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
private static void setOptions(Options options){
HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
List authSchemes = new ArrayList();
authSchemes.add(HttpTransportProperties.Authenticator.NTLM);
auth.setAuthSchemes(authSchemes);
auth.setUsername(userName);
auth.setPassword(password);
auth.setHost(host);
auth.setPort(port);
auth.setDomain(domain);
auth.setPreemptiveAuthentication(false);
options.setProperty(HTTPConstants.AUTHENTICATE, auth);
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, "true");
}
}
此外,这是我收到的错误消息:
org.apache.axis2.AxisFault: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'S' (code 83) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:123)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:67)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:354)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at com.spanlink.crm.dynamics4.webservice.CrmServiceStub.create(CrmServiceStub.java:618)
at com.spanlink.crm.dynamics4.runtime.TestCRM.main(TestCRM.java:82)
Caused by: org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'S' (code 83) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:260)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:161)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:110)
at org.apache.axis2.builder.BuilderUtil.getSOAPBuilder(BuilderUtil.java:682)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:215)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:145)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:108)
... 7 more
Caused by: com.ctc.wstx.exc.WstxUnexpectedCharException: Unexpected character 'S' (code 83) in prolog; expected '<'
at [row,col {unknown-source}]: [1,1]
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedChar(StreamScanner.java:623)
at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2047)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069)
at javax.xml.stream.util.StreamReaderDelegate.next(StreamReaderDelegate.java:60)
at org.apache.axiom.om.impl.builder.SafeXMLStreamReader.next(SafeXMLStreamReader.java:183)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:597)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:172)
... 13 more
编辑:啊,我想也许我正在做点什么。我使用wireshark来查看发生了什么,看起来“S”来自服务器响应。嗅探流量,看起来问题是,“服务器无法处理请求.---&gt;调用目标已抛出异常.---&gt;您应指定父联系人或帐户。 r \ n“个
到目前为止我还没有回复,因为我在技术上还没有工作,但至少我知道现在发生了什么。
答案 0 :(得分:0)
我能够让它工作,只需要添加一个父帐户。
答案 1 :(得分:0)
我很高兴你有这个工作。当CRM抛出异常时,首先要检查的是CRM跟踪日志。 CRM提供了一个很好的描述出错的地方。这有助于大大缩小您的调查范围。
有关在服务器上启用跟踪的更多信息: http://support.microsoft.com/kb/907490