WSO2 - Error on validating payload - wso2

I am facing an alarming situation with the services published in WSO2 ESB. In an absolutely random way, some services fail the response message validation, in spite of the fact that de response is totally correct. The error deals with missed tagges in the payload. This takes place with no pattern at all. A services is working until it starts to respond a validation fault. When this occurs, I check the following:
A soapUI client can be generated by the WSDL published by the ESB, so it is not a reference issue.
Response is validated successfully by the XSD used by the validate mediator. (validated by an alternative tool).
I can even see the payload that previously is logged and it is correct. This have occured several times in different services.
The only way to fix this is undeploy the services and deploy it again. I have try the redeploy option in the service dashboard, and reset the whole system with no success.
I have a feeling that somehow the payload used by the validate mediator is a kind of locked, blank, unreachable or dirty.
How can I set the validate mediator process in debug mode? I think this might help.
Any help? I am thinking of denying using this system in a production environment.
I use wso2 esb 4.5.1.
King regards.

Put the log mediator with the log level ="full" before the validate mediator and see, what is passed to the validate mediator. This will help you to find the erroneous response..

Related

Using local API endpoint for message processor issue

I'm trying to create a retry mechanism which will be recall my API (using POST method) in case of error (for example HTTP 400)
For this reason, I've created an In Memory Message Store. If my REST call is failed, I send the message to the message store that I created.
Then I tried to create an endpoint which is the same API URL (Scheduled Message Forwarding Processor will be used that) in WSO2 Management Console UI:
, but I've got the following error when I click the Test button:
Interesting thing is I can access the API with Postman or through my application but, WSO2 itself cannot access the API which is available on it.
I realized that when I click the test button, WSO2 adds ?wsdl at the end of the endpoint that I try and only available GET APIs can be recalled by message processor with this method but my API using POST method, and I need to recall it.
I'm using WSO EI 6.4.0
Thanks for any idea!
Regards.
For connection to REST API, you should use HTTP Endpoint, not the Address Endpoint
.
But you may consider extracting the logic you want from your API into a sequence and using the Message Sampling Processor to push messages to that sequence rather than your own REST API. This could be a more efficient solution.

WSO2 APi Manager Response Code 0

I'm trying to use WSO2 API Manager 1.10.0 on an existent micro-services project with REST APIs following WSO2 tutorial.
I have installed it on my computer as well as a copy of my application and configured AM to manage requests (GET, POST and DELETE) to my resource but I always obtain a "Response code 0" with Response Header
{
"error": "no response from server"
}
Trying to contact my application using Advanced REST Client I obtain 200 with the correct result.
My APIs use a token inside the header to authenticate the user passed so I have implemented a dummy API without authentication but I still have the same issue.
I have tried also the Cloud version with our test server but still obtaining the same result.
I found this guide http://wso2.com/blogs/cloud/video-setting-up-custom-url-for-api-store-and-gateway/ but I don't know if this can be a solution for the problem in localhost.
Setting up the custom url in WSO2 API Cloud wont help. Thats there for a different purpose. There are two things you can do.
If you are interested in going ahead with the cloud version, you can get help from them. You can send a support request and the cloud team will help.
You can troubleshoot your local instance. When doing so, first, try to invoke your api via curl and see whether it gets a response. Sometime, your api can work fine, but due to some reasons, the result might not reach the api console.
If the curl works fine or not, you can check the logs to see whether there are any errors printed. Some more questions:
Is your backend service exposed via http or https?
If it is https, then if its certificate is not a CA signed one, API Manager will fail during the handshake. If so, you will have to add the cert to api managers client-truststore.jks
In the cloud scenario, your backend should be accessible from internet and the certificate story is valid for cloud too.
Are you trying to access the api using swagger console (or any web application). There are couple of reasons you could encounter this issue. one could be certificate not installed in the browser.
If this happens you should see some error log in the api manager console (something related to CA not found). for that first you can copy the backend url (swagger console shows the url it used to send the request) and paste it on a new browser window and install the certificate to the browser.
also you can get an idea about the issue by using a tool like firebug and check the request. (it will show the error for not connecting the AM)
Finally I have found the issue: the API Manager does not accept plain text response, responding using a JSON solves the problem.
Using other mediatype such as XML or TEXT/HTML it reports 406, with text plain it returns Error 0.

Getting binary response or method not allowed. When tried setting only http endpoint I never got response its just keeping processing for long time

I am using wso2 1.10.0 api manager for first time. I need to access the http backend with simple query parameter. I published the api and tried either by setting as queryparam or json object, it's not giving me the expected result. I will get binary response or method not allowed. When tried setting only http endpoint I never got response its just keeping processing for long time. Please suggest me how do I access simple http backend. Need to show demo in a week.
Please help to solve this.
You get 'method not allowed' when you try to access a resource which was not defined for that method (say backend has POST method supporting resource only and you try to do a GET request)
I guess the issue is with the way you have defined the resources for the api from the publisher application. (invalid HTTP methods for resources)
If you think you have defined them correctly, then the next step to identify the issue is wirelogs. wirelogs provide all the info in request passing through the api manager gateway (request headers, body etc)
Follow this article http://mytecheye.blogspot.com/2013/09/wso2-esb-all-about-wire-logs.html on how to enable and read them
You can then directly call the backend (say curl -v to the backend) and compare the request from the direct call vs the one going out from
gateway to the backend and check the difference. This would help you start finding the issue
Since you are new to API manager, I would recommend you to do following first
Try out a simple scenario similar to your one. You can google it. This is from official documentation. would recommend to try out a simple scenario first. say https://docs.wso2.com/display/AM1100/Convert+a+JSON+Message+to+SOAP+and+SOAP+to+JSON
Then use SOAP UI or similar app to directly call the backend web service (not the api manager) and get the SOAP request and SOAP response for the backend.
Then create the api in API manager. you need to do the same thing in the sample i provided. only difference is the soap payload. use the previously collected SOAP messages.
Enable wire logs. for that see the comments in the previous answer. In wirelogs you will see >> and << signs
To read the wire log, first we have to identify message direction.
DEBUG - wire >> - This represent the message coming into API manager from the wire (will notice two set of these. one coming in to the
gateway from the rest client and response coming in to the api manager from the backend. )
DEBUG - wire << - This represents the message going to the wire from API manager (again two sets. request going from api manager to the
backend service and the response sent to the rest client from the api manager.)
the soap message will be printed in this log. check for the request going from api manager to the backend and the response coming from the
backend to the api manager. you can compare that to the onces you collected in the step 2 and do modifications if needed to the sequnces.
the wirelogs will also print the http headers. so check that as well.
hope you could set up a working sample using these steps

Get raw SAML response from omniauth-saml failure callback

I am using omniauth-saml 1.3.1 with omniauth 1.2.2 in rails 4.2. It works well with my test identity provider set up at openidp.feide.no (a nifty tool for those setting up a SAML service provider). It even works in production.
Now I am trying to get an IdP set up with a client of mine. When the user visits /auth/saml, they are directed to the client's IdP as expected. The user is able to use their email/pw to login.
The IdP then responds to my SP, but omniauth is redirecting to the failure callback.
As seen here, I get an error message "invalid_ticket". However, the error itself isn't getting passed to my failure controller action in env["omniauth.error"], as I read it should somewhere (unfortunately I can't find that documentation right now).
I'm hoping somebody will have some advice as to how I can figure out what is causing the "invalid_ticket" to happen. Is there perhaps a way to see the raw SAML response from the IdP?
I should note that I need to find this information in production because the client's IdP points to our production SP and I can't convince them to point it somewhere I can do some more extensive testing (like my localhost dev machine). I can, however, write in some more logging or Honeybadger exception reporting if that will help.
Currently, I am reporting to Honeybadger all env["omniauth.*"] values and params when omniauth redirects to the failure route, but I am not getting any information further than Omniauth message: invalid_ticket.
A big thank you to anyone who can help me go in the right direction here!
You might want to try adding other environments to failure_raise_out_environments:
OmniAuth.config.failure_raise_out_environments = ['development', 'staging', 'production']
to your initializer. You will get meaningful error messages in your log or Honeybadger.
These errors are by default raised only in development environment.

In peoplesoft User registration service SCC_USERREG, create account service operation "SCC_USERREG_CREATEACCT.v1" isnt working. Gives error.

In peoplesoft User registration service SCC_USERREG, create account service operation SCC_USERREG_CREATEACCT.v1 isnt working.
Error I get:
An Error occurred processing this request (14098,286)
I have checked security settings, scc_guest, SCC_ss_template
How are you making the tests? With SOAP UI?
Is your gateway running and the handler active?
This service of mine works fine, but there were a trick with the XML (If I recall correct, it is with the constituent collection), so if you can post the XML here, it would be nice. BTW, which CS bundle are you?