2014-01-08 4 views
0

Я использую Axis2 Wsdl2java из службы на основе SOAP, которая размещена в IIS. Я сначала установил requestHeader, а затем попытался выполнить метод Create в клиенте, который принимает два параметра payload xml как OMElement и requesType как строку, но получая исключение, как показано ниже.Исключение при попытке выполнить сервис-клиент axis2

org.apache.axis2.AxisFault: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidCastException: Unable to cast object of type 'System.Xml.XmlNode[]' to type 'System.String'. 

Может кто-то, пожалуйста, помогите мне понять проблему с кодом ниже или почему я получаю исключение?

Пожалуйста, смотрите ниже моего кода клиента:

package net.approva.BizRights.Services; 

public class Client{ 
    public static void main(java.lang.String args[]){ 
    try 
    { 
     ApprovalRequestManagerStub stub = 
     new ApprovalRequestManagerStub("serverurl.asmx");    
     Create(stub);  
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
     System.out.println("\n\n\n"); 
    } 
    } 
    /* Create */ 
    public static void Create(ApprovalRequestManagerStub stub){ 
     try 
     {    
      net.approva.BizRights.Services.ApprovalRequestManagerStub.Create req = new Create();    

      java.lang.String content = "<approvalrequests xmlns=\"http://www.approva.net/ApprovalRequest.xsd\"><approvalrequest><name>USER 002371(ABC)</name><type>OnlyWhatIfAnalysis</type><status>SubmittedForWhatIf</status><priority>Medium</priority><applicationid>2</applicationid><applicationname>SAP AI Connection</applicationname><format>NoConstraints</format><requestdetails><roleassignment><users><user><id>591</id><userid>ABC</userid><lastname>002371</lastname><firstname>USER</firstname><validfromdate>1900-01-01</validfromdate><validtodate>1900-01-01</validtodate></user></users><roles><role revoke=\"false\"><id>3172</id><name>SAP_ICM_S_CUST</name><fromdate>1900-01-02T00:00:00</fromdate><todate>1900-01-01T00:00:00</todate><roletype>4</roletype><description>Commissions: Customizing</description></role></roles></roleassignment><applicationscope><scope displaytext=\"Application\" name=\"firstlevelscope\"><scopevalue displaytext=\"SAP AI Connection\">SAP AI Connection</scopevalue></scope></applicationscope><comment /><asanotheruser /><requestor><id>1</id><userid>administrator</userid></requestor><whatifliveverify>1</whatifliveverify><analysisresults /></requestdetails><requestor><lastname /><firstname /><displayname>administrator</displayname></requestor><applicationscope><scope name=\"firstlevelscope\"><scopevalue>SAP AI Connection</scopevalue></scope></applicationscope><liveverify>1</liveverify></approvalrequest></approvalrequests>"; 

               org.apache.axiom.om.OMFactory fac = org.apache.axiom.om.OMAbstractFactory.getOMFactory(); 
               org.apache.axiom.om.OMNamespace omNs = fac.createOMNamespace("http://www.approva.net/BizRights/Services", null);            
               org.apache.axiom.om.OMElement _valueObjXML = fac.createOMElement("approvalrequests", omNs);             
               _valueObjXML.addChild(fac.createOMText(_valueObjXML, content));       

               req.setObjXML(_valueObjXML);          

               System.out.println(_valueObjXML.getText());            

      req.setObjType(WellKnownType.ApprovalRequest); 

      BRSoapHeader brSOAP = new BRSoapHeader(); 
      brSOAP.setProfileID(1); 
      brSOAP.setCallingModuleName(null); 
      brSOAP.setOpDocumentationXML(null); 

      BRSoapHeaderE brSoapHeader = new BRSoapHeaderE(); 
      brSoapHeader.setBRSoapHeader(brSOAP);  

      net.approva.BizRights.Services.ApprovalRequestManagerStub.CreateResponse res = new CreateResponse(); 
      res = stub.create(req, brSoapHeader);   

      System.out.println(res.toString()); 
      System.out.println("Request Creation done using Axis2"); 
     } catch(Exception e){ 
      e.printStackTrace(); 
      System.out.println("\n\n\n"); 
     } 
    } 


} 
+0

Пожалуйста, отформатируйте свой код – Hilikus

ответ

0

Прежде всего вы уже включили approvalrequests тег на этой линии в строке декларации содержимого

java.lang.String content = "<approvalrequests xmlns=\"http://www.approva.net/ApprovalRequest.xsd\"><approvalrequest><name>USER 002371(ABC)</name><type>OnlyWhatIfAnalysis</type><status>SubmittedForWhatIf</status><priority>Medium</priority><applicationid>2</applicationid><applicationname>SAP AI Connection</applicationname><format>NoConstraints</format><requestdetails><roleassignment><users><user><id>591</id><userid>ABC</userid><lastname>002371</lastname><firstname>USER</firstname><validfromdate>1900-01-01</validfromdate><validtodate>1900-01-01</validtodate></user></users><roles><role revoke=\"false\"><id>3172</id><name>SAP_ICM_S_CUST</name><fromdate>1900-01-02T00:00:00</fromdate><todate>1900-01-01T00:00:00</todate><roletype>4</roletype><description>Commissions: Customizing</description></role></roles></roleassignment><applicationscope><scope displaytext=\"Application\" name=\"firstlevelscope\"><scopevalue displaytext=\"SAP AI Connection\">SAP AI Connection</scopevalue></scope></applicationscope><comment /><asanotheruser /><requestor><id>1</id><userid>administrator</userid></requestor><whatifliveverify>1</whatifliveverify><analysisresults /></requestdetails><requestor><lastname /><firstname /><displayname>administrator</displayname></requestor><applicationscope><scope name=\"firstlevelscope\"><scopevalue>SAP AI Connection</scopevalue></scope></applicationscope><liveverify>1</liveverify></approvalrequest></approvalrequests>"; 

Затем снова вы добавляете другой approvalrequests тег здесь,

org.apache.axiom.om.OMElement _valueObjXML = fac.createOMElement("approvalrequests", omNs); 
+0

Я попробую удалить он использует другую перегрузку createOMElement, но как вы думаете, это исключение связано с этой строкой кода? во время отладки я обнаружил, что он отправляет только «контент» только XML, а не прилагаемый. Я попытался запустить код без строки ниже и получил то же исключение ..... System.out.println (_valueObjXML.getText()); – Rajnish

+0

Я заметил, что это происходит потому, что OMElement получает сериализован как XML вместо строки, если кто-то может помочь понять процесс сверления OMElement в AXIS2, может мне помочь .. – Rajnish

Смежные вопросы