locked
Unable to Create New Incidents in Dynamics CRM with Java and Axis2 RRS feed

  • Question

  • So I've been working on trying to figure this out, oddly when I ran it one machine I got a generic Axis Fault with no description, but now on another machine I'm getting a different error message, but I'm still stuck. Basically I'm just trying to do what I thought would be a fairly trivial task of creating a new incident in Microsoft Dynamics CRM 4.0 via a web services call.

    I started by downloading the XML from http://hostname/MSCrmServices/2007/CrmService.asmx and generating code from it using Axis2. Anyway, here's my program, any help would be greatly appreciated, as I've been stuck on this for way longer than I thought I'd be and I'm really out of ideas here. 

            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");  
        	}
        }


    Also, here's the error message I receive:

        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
    


    Monday, June 14, 2010 3:28 PM

Answers

  • Ah, I think maybe I'm on to something. I used wireshark to see what was going on, and it looks like that 'S' is from a server response. Sniffing the traffic, it looks like the problem is, "Server was unable to process request. ---> Exception has been thrown by the target of an invocation. ---> You should specify a parent contact or account.\r\n"

    I still don't have it working properly, but at least now I can see what is going on here.

    I've figured it out, just needed to add a parent account.
    Monday, June 14, 2010 3:54 PM

All replies

  • Ah, I think maybe I'm on to something. I used wireshark to see what was going on, and it looks like that 'S' is from a server response. Sniffing the traffic, it looks like the problem is, "Server was unable to process request. ---> Exception has been thrown by the target of an invocation. ---> You should specify a parent contact or account.\r\n"

    I still don't have it working properly, but at least now I can see what is going on here.

    I've figured it out, just needed to add a parent account.
    Monday, June 14, 2010 3:54 PM
  • Could you please specify, what do you mean by "just needed to add a parent account."
    Friday, December 5, 2014 12:45 PM