Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java client is not able to consume WCF service

Tags:

java

wcf

I have a WCF webservice which is being consumed by a WCF client and Java. The .net client is working fine but java client is not able to communicate and throwing the below error.

<s:Fault>
  <faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none" xmlns="">a:ActionNotSupported</faultcode>
  <faultstring xml:lang="en-US" xmlns="">The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver.  Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).</faultstring>
</s:Fault>

I have captured both the requests but not able to figure out the actual issue.

This is request sent by .net client.

<MessageLogTraceRecord>
  <HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace">
    <Method>POST</Method>
    <QueryString></QueryString>
    <WebHeaders>
      <Connection>Keep-Alive</Connection>
      <Content-Length>277</Content-Length>
      <Content-Type>text/xml; charset=utf-8</Content-Type>
      <Expect>100-continue</Expect>
      <Host>devint</Host>
      <VsDebuggerCausalityData>uIDPoz4EUGTdY91Co1FESc2IENsAAAAAfpHU4m1Iok+wSxmrwkiWZ9iNzD51RjZMnpnEBbceBDcACQAA</VsDebuggerCausalityData>
      <SOAPAction>"http://tempuri.org/Test/IsPilotUser"</SOAPAction>
      <X-Forwarded-For>xx.xxx.xxx.xxx</X-Forwarded-For>
      <X-Optier-Context-Address>43143760</X-Optier-Context-Address>
    </WebHeaders>
  </HttpRequest>
  <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
      <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://service url here</To>
      <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/Test/IsPilotUser</Action>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <IsPilotUser xmlns="http://tempuri.org/">
        <UserID>AA</UserID>
      </IsPilotUser>
    </s:Body>
  </s:Envelope>
</MessageLogTraceRecord>

The below is request generated by java client-

<MessageLogTraceRecord>
  <HttpRequest xmlns="http://schemas.microsoft.com/2004/06/ServiceModel/Management/MessageTrace">
    <Method>POST</Method>
    <QueryString></QueryString>
    <WebHeaders>
      <Cache-Control>no-cache</Cache-Control>
      <Connection>keep-alive</Connection>
      <Pragma>no-cache</Pragma>
      <Content-Length>1414</Content-Length>
      <Content-Type>text/xml; charset=utf-8</Content-Type>
      <Accept>text/xml, text/html, image/gif, image/jpeg, *; q=.2, * / *; q=.2</Accept>
      <Host>devint</Host>
      <User-Agent>Java/1.6.0_25</User-Agent>
      <SOAPAction>""</SOAPAction>
      <X-Optier-Context-Address>43526520</X-Optier-Context-Address>
    </WebHeaders>
  </HttpRequest>
  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header xmlns:hdr="http://xml.example.com/ns/appmw/soap/1.0/header">
      <hdr:RequestID xmlns:hdr="http://xml.example.com/ns/appmw/soap/1.0/header">287933.1372254929205.341301</hdr:RequestID>
      <hdr:Timestamp xmlns:hdr="http://xml.example.com/ns/appmw/soap/1.0/header">1372254929205</hdr:Timestamp>
      <hdr:Principal xmlns:hdr="http://xml.example.com/ns/appmw/soap/1.0/header">
        <saml:Assertion xmlns:saml="http://xml.example.com/ns/appmw/soap/1.0/saml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Issuer="PingFederate SiteMinder SOAP Connector" xsi:type="saml:AuthenticationAssertionType">
          <saml:Subject>
            <saml:NameIdentifier>
              <saml:SecurityDomain>KerberosID</saml:SecurityDomain>
              <saml:Name>None</saml:Name>
            </saml:NameIdentifier>
            <saml:SubjectConfirmation>
              <saml:AuthenticationMethod>Netegrity</saml:AuthenticationMethod>
              <saml:SubjectConfirmationData>None</saml:SubjectConfirmationData>
            </saml:SubjectConfirmation>
          </saml:Subject>
        </saml:Assertion>
      </hdr:Principal>
      <To SOAP-ENV:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://service url here</To>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
      <pf:AttributesRequest xmlns:pf="http://xml.ms.com/ns/webinfra/pingfederate/sso-attributes">
        <pf:Data>
          <pf:HumanNo></pf:HumanNo>
          <pf:Originator>None</pf:Originator>
          <pf:UniqueID>None</pf:UniqueID>
        </pf:Data>
        <pf:Attribute>
          <pf:Name>IsPilotUserResult</pf:Name>
        </pf:Attribute>
      </pf:AttributesRequest>
    </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>
</MessageLogTraceRecord>

I am not familiar with Java so any help will be appreciated.

like image 269
DJay Avatar asked Jun 26 '13 16:06

DJay


1 Answers

Your java client sends this http header:

SOAPAction=""

While .Net sends this one:

SOAPAction="http://tempuri.org/Test/IsPilotUser"

Force the java client to send the correct value.

like image 119
Yaron Naveh Avatar answered Oct 18 '22 05:10

Yaron Naveh